Windows 批处理文件中的连字符是什么意思?

mid*_*ite 1 windows command-line environment-variables batch-file cmd.exe

特别是,我在理解以下行中的连字符时遇到问题,这些行来自维基教科书

if not -%1-==-- echo Argument one provided
if -%1-==-- echo Argument one not provided & exit /b
Run Code Online (Sandbox Code Playgroud)

要测试变量是否存在或定义,基本上有两种方法,我从这里学到:

IF DEFINED MyVar (ECHO MyVar IS defined) ELSE (ECHO MyVar is NOT defined)

IF "%MyVar%"=="" (ECHO MyVar is NOT defined) ELSE (ECHO MyVar IS defined)
Run Code Online (Sandbox Code Playgroud)

那么,(1) %1 参数周围的连字符和 (2) == 符号后面的连字符是什么意思?

Red*_*ick 6

考虑这个

C:\>if not -%1-==-- echo Argument one provided
Argument one provided

C:\>if not P%1P==PP echo Argument one provided
Argument one provided
Run Code Online (Sandbox Code Playgroud)

很明显,减号/连字符只是为了方便指定空值。该特定符号在该表达式中没有特殊含义 - 它被视为任何其他非特殊字符。

我们可以添加空格以更清楚地表明==操作符没有被周围的字符修改

C:\>if not P%1P == PP echo Argument one provided
Argument one provided
Run Code Online (Sandbox Code Playgroud)

一般来说,最好使用更多人会更直接理解的传统方法(例如使用引号)。

C:\>if not "%1"=="" echo Argument one provided
Argument one provided
Run Code Online (Sandbox Code Playgroud)

对于 DOS 和 Windows 的早期版本,我相信使用引号存在一些问题(我不记得了)导致人们以这种方式使用可打印字符。例如,我还没有尝试过 %1 包含引号的情况。