Board logo

标题: [其他] 有没有检查批处理语法错误的工具? [打印本页]

作者: crist    时间: 2011-4-27 15:08     标题: 有没有检查批处理语法错误的工具?

谁知道有什么工具能检查所写批处理是否存在语法错误的吗?
作者: batman    时间: 2011-4-27 15:42

cmd
作者: Batcher    时间: 2011-4-27 16:20

试试这个:
http://bbs.bathome.net/thread-7186-1-1.html
作者: applba    时间: 2011-4-27 17:11

notepad++
语法高亮很好用,支持宏,还以直接cmd运行
作者: 路过    时间: 2012-10-20 16:17

试试这个  能检查大部分错误
但不能检测以参数执行命令的批处理文件和标记跳转检测
使用方法:把任意BAT文件拖入到本程序即可 支持多个文件 解决了空格文件读取出错的BUG

@echo off
mode con cols=79 lines=50
title Bat Test
::把开启延缓环境变量放到后面 使%*第一个带有空格的文件拖入时不退出
set `=%*
set gc=0
setlocal enabledelayedexpansion
echo;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
::获取dos内部命令
for /f  %%i in ('help^|findstr "^[A-Z]"') do (set ml=!ml!%%i )
set ml=%ml%: ^( ^) ^^
::开始扫描
for %%a in (%`%) do (set fy=
::检查%%a变量是不是参数
if "%%~a" neq "%%~nxa" (
  ::检查%%a格式是否为bat
  if /i "%%~xa" equ ".bat" (
   for /f "delims= " %%b in (%%~sa) do (
    ::检查文件是否符合要求[EXE 和 0KB的 淘汰]
    if not defined %%b (
     ::检查是否已经检查
     if not defined fy (
      ::开始检查
      set/a gc+=1
      call :fy %%~sa
      set fy=y
     )
    )
   )
  )
)
)
pause
exit

:fy
set/a "w=0,jgs=0,cws=0,rz=0,ry=0"
::开始检测%1
echo;&echo;      加载%1中&echo;
for /f "delims=" %%c in (%1) do (
set/a w+=1&set r2=%%c&set r=%%c
::删除空格
call :nod
for %%d in (!ml!) do (set r2=!r2:%%d=!)
set w!w!=!r!&if /i "!r2!"=="!r!" (if "!r3:~-1!" neq "^" (echo;%%c 不是内部命令&set/a jgs+=1))
set r3=%%c
)
for /l %%c in (1,1,!w!) do (
if "!w%%c:~0,1!" neq "" (
if "!w%%c:~0,1!" equ "(" (if !rz! equ 1 (echo;列:%%c 使用^( 时错误&set/a cws+=1) else (set/a "rz=1,zz+=1")) else (set w%%c=!w%%c:~1,1023!)
if "!w%%c:~0,1!" equ ")" (if !rz! equ 1 (echo;列:%%c 使用^) 时错误&set/a cws+=1) else (set/a "ry=1,zz-=1")) else (set w%%c=!w%%c:~1,1023!)
)
)
echo;&echo; 工程:!gc! 测试结束 警告数量:!jgs! 错误数量:!cws!&echo;
echo;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Goto :EOF

:nod
if "!r:~0,1!" equ " " (set r=!r:~1,1023!&set r2=!r!&call :nod) else (Goto :EOF)
作者: rthgu    时间: 2023-6-5 09:42

https://www.robvanderwoude.com/
这个网站有可以检查的工具




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2