MSDOS.bat文件的静态分析器,与NT派生版本的Windows兼容



command.com有一个漂亮的/y /c选项,可以在不执行代码的情况下检查语法。cmd.exe有类似的选项吗?.bat文件是否有第三方linters?

cmd帮助消息(Windows 8):

启动Windows命令解释器的新实例CMD[/A |/U][/Q][/D][/E:ON |/E:OFF][/F:ON |/F:OFF]//V:ON |/V:OFF][[/S][/C|/K]string]/C执行字符串指定的命令,然后终止/K执行字符串指定的命令,但保留/S修改/C或/K之后字符串的处理方式(见下文)/Q关闭回声/D禁止从注册表执行自动运行命令(见下文)/A使管道或文件的内部命令输出为ANSI/U使内部命令到管道或文件的输出Unicode/T: fg设置前景色/背景色(请参阅COLOR/?了解更多信息)/E: ON启用命令扩展(见下文)/E: OFF禁用命令扩展(见下文)/F: ON启用文件和目录名完成字符(见下文)/F: OFF禁用文件和目录名完成字符(见下文)/V: ON启用延迟环境变量扩展使用!作为分隔符。例如,/V:ON将允许!var!以扩展执行时的变量var。var语法扩展变量在输入时,在FOR内部则完全不同环/V: OFF禁用延迟的环境扩展。请注意,多个命令由命令分隔符"&&"分隔如果用引号括起来,则接受作为字符串。此外,为了兼容性原因,/X与/E:ON相同,/Y与/E:OFF相同,/R是与/C相同。忽略任何其他开关。如果指定了/C或/K,则后面的命令行的剩余部分开关被处理为命令行,其中以下逻辑是用于处理引号(")字符:1.如果满足以下所有条件,则使用引号保留命令行上的:-无/S开关-正好两个引号字符-在两个引号字符之间没有特殊字符,其中special是其中之一:&()@^|-在两个引号字符-两个引号字符之间的字符串是名称可执行文件的。2.否则,旧的行为是查看第一个字符是否一个引号字符,如果是,去掉前导字符删除命令行上的最后一个引号字符,保留最后一个引号字符后的任何文本。如果在命令行上没有指定/D,那么当CMD.EXE启动时查找以下REG_SZ/REG_EXPAND_SZ注册表变量,如果其中一个或两个都存在,则首先执行它们。HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun和/或HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun默认情况下会启用命令扩展。您也可以禁用通过使用/E:OFF开关来扩展特定调用。你可以在上为CMD.EXE的所有调用启用或禁用扩展通过设置使用REGEDIT.EXE在注册表中显示以下REG_DWORD值:HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions和/或HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions设置为0x1或0x0。特定于用户的设置优先于机器设置。命令行开关优先于注册表设置。在批处理文件中,SETLOCAL ENABLEEXTENSIONS或DISABLEEXTENSIONS参数优先于/E:ON或/E:OFF开关。参见SETLOCAL/?详细信息。命令扩展涉及对以下内容的更改和/或添加命令:DEL或ERASE颜色CD或CHDIRMD或MKDIR提示PUSHDPOPD集合SETLOCALENDLOCAL如果FOR呼叫移位GOTOSTART(还包括对外部命令调用的更改)ASSOCf型要获取特定的详细信息,请键入commandname/?查看详细信息。默认情况下,延迟环境变量扩展未启用。你可以为使用/V:ON或/V:OFF开关调用CMD.EXE。你可以在上为CMD.EXE的所有调用启用或禁用延迟扩展通过设置使用REGEDIT.EXE在注册表中显示以下REG_DWORD值:HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion和/或HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion设置为0x1或0x0。特定于用户的设置优先于机器设置。命令行开关优先于注册表设置。在批处理文件中,SETLOCAL ENABLEDELAYEDEXPANSION或DISABLEDELAYEDXPANSION自变量优先于/V:ON或/V:OFF开关。参见SETLOCAL/?详细信息。如果启用了延迟环境变量扩展,则感叹号字符可用于替换环境变量的值在执行时。您可以启用或禁用特定的文件名完成使用/F:ON或/F:OFF开关调用CMD.EXE。您可以启用或禁用机器上CMD.EXE的所有调用的完成和/或通过设置以下REG_DWORD之一或两者,用户登录会话使用REGEDIT.EXE的注册表中的值:HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionCharHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar和/或HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionCharHKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar带有控制字符的十六进制值以用于特定函数(例如0x4是Ctrl-D,0x6是Ctrl-F)。特定于用户设置优先于机器设置。命令行开关优先于注册表设置。如果使用/F:ON开关启用完成,则两个控制使用的字符是Ctrl-D表示目录名完成,Ctrl-F表示文件名完成。禁用中的特定完成字符注册表,使用空格(0x20)的值,因为它不是有效的控制字符。当您键入两个控件中的任何一个时,都会调用Completion字符。completion函数将路径字符串移到左边如果已经没有通配符,则为其添加一个通配符呈现并建立匹配的路径列表。然后显示第一匹配路径。如果没有匹配的路径,它只会发出蜂鸣声并离开单独显示。此后,重复按下相同的控制按钮字符将在匹配路径列表中循环。按下带有控制字符的Shift键将在列表中移动向后如果您以任何方式编辑行并按下控制按钮字符,保存的匹配路径列表将被丢弃一个生成。如果在文件和目录之间切换,也会发生同样的情况名称完成。两个控制字符之间的唯一区别是文件完成字符与文件名和目录名都匹配,而目录完成字符仅与目录名匹配。如果在任何内置目录命令上使用了文件完成(CD、MD或RD),则假定目录完成。完成代码正确处理包含空格的文件名或通过在匹配路径周围放置引号的其他特殊字符。此外,如果您进行备份,然后从一行中调用completion调用完成时光标右侧的文本是丢弃。需要引号的特殊字符有:&()[]{}^=;!'+`~

我不知道有第三方工具可以做这件事。

最新更新