运行以下最小示例:
(
echo if "%%1" == "" (
echo echo Success ^|^| goto :fail
echo ^) else (
echo echo Failure ^|^| goto :fail
echo ^)
) >"testresult.bat"
call "testresult.bat" "first 1" --flag="other options" --verbose
结果如下testresult.bat
:
if "%1" == "" (
echo Success || goto :fail
) else (
echo Failure || goto :fail
)
并testresult.bat
通过命令行参数调用"first 1" --flag="other options" --verbose
给了我:
C:\User>test.bat
C:\User>(
echo if "%1" == "" (
echo echo Success || goto :fail
echo ) else (
echo echo Failure || goto :fail
echo )
) 1>"testresult.bat"
C:\User>call "testresult.bat" "first 1" --flag="other options" --verbose
1"" was unexpected at this time.
C:\User>if ""first 1"" == "" (
C:\User>
该错误1"" was unexpected at this time.
是由于我的第一个参数用双引号引起的。
我如何正确编写自己的代码if "%1" == ""
以检查第一个参数是否为空,而不管它是否带有双引号?
这里的问题是引用参数1"%1"
而不是"%~1"
。
在Windows命令提示符窗口中运行时的帮助输出call /?
说明,该%1
引用引用了传递给批处理文件的第一个参数,而没有或用双引号引起来。
因此,将字符串"first 1"
作为第一个参数传递给创建的批处理文件会导致IF条件,而""first 1""
留给比较运算符==
,这是IF条件下的严重语法错误。
通常使用的解决方案是"%~1"
在IF命令行上使用。如果根本没有双引号,则该修饰符会~
导致"
从第一个参数字符串中删除双引号。因此,在IF条件下的第一个字符串现在几乎总是正确的,并用一对双引号引起来。
可以if "%~1" == ""
使用第一个参数调用批处理文件:
argument1
...由于"
不必要而未用引号引起来。"argument 1"
...由于空格字符而引述了参数字符串。""
...空字符串作为参数字符串。"argument 1
...在这种情况下,删除了带有空格字符但不能正确使用引号的引数字符串,但在开头将其%~1
用作单引号"
。argument1"
...引号参数字符串不正确。"
指定参数字符串不正确的结尾,if "%~1" == ""
这是由于命令行为导致命令行语法错误if "argument1"" == ""
。在Windows批处理文件的IF条件下,请参阅我的答案“ IF”条件下的“…”和x“…”之间有什么区别?它详细说明了如何编写即使在最后一个参数示例中也可以使用的批处理文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句