当第一个命令行参数用双引号引起来时,错误“ 1”“此时是意外的。

用户

运行以下最小示例:

(
    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" == ""使用第一个参数调用批处理文件

  1. argument1...由于"不必要而未用引号引起来
  2. "argument 1" ...由于空格字符而引述了参数字符串。
  3. ""...空字符串作为参数字符串。
    尽管批处理文件使用参数字符串运行,但条件为true。大多数需要一个或多个参数字符串的批处理文件不允许参数字符串之一为空字符串。但是某些批处理脚本还支持空参数字符串。
  4. "argument 1...在这种情况下,删除了带有空格字符但不能正确使用引号的引数字符串,但在开头将其%~1用作单引号"
  5. argument1"...引号参数字符串不正确。
    Windows命令处理器不会删除"指定参数字符串不正确的结尾,if "%~1" == ""这是由于命令行为导致命令行语法错误if "argument1"" == ""

在Windows批处理文件的IF条件下,请参阅我的答案“ IF”条件下的“…”和x“…”之间有什么区别?它详细说明了如何编写即使在最后一个参数示例中也可以使用的批处理文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

cmd PATH错误-\ common在此时是意外的

启动配置向导失败,错误:“==””此时是意外的

)此时发生意外错误

批量调试错误“如果此时不是意外的”

\ /?' 此时是意外的批处理文件中的错误

cmd.exe引发错误“此时,&意外。”

错误消息“此时N意外”的原因是什么?

批处理脚本 - 此时出现意外错误

解析参数'--expression-attribute-values'时出错:无效的JSON:期望属性名称用双引号引起来:第1行第3列(字符2)

用双引号引起来时忽略逗号

从命令提示符处运行时,FOR / DO命令给出“此时是意外情况”

使用 Java 运行 Spark 时出现 cmd 错误“此时通用是意外的”

“输入”此时是意外的

(此时设置为意外

.TargetPath在此时是意外的

python命令行参数必须用引号引起来吗?

Unix-用双引号引起来的CSV环绕第一列

什么是sed comand来修复此文件,所以每行的最后一个值用双引号引起来

文本是否用双引号引起来时,转义文本中的特殊字符

exec用双引号引起来

用双引号引起来

VBScript Regex当数字用引号引起来时替换

str_getcsv不在多行CSV中将第一列用双引号引起来

当表名用双引号引起来时,只能在Oracle SQL中找到表。为什么?

“ addWorksheet(wb,“ sheet1”)中的错误:第一个参数必须是工作簿”

“ addWorksheet(wb,“ sheet1”)中的错误:第一个参数必须是工作簿”

如何在sed命令中正确用双引号将变量引起来

Visual Studio代码-节点应用程序的启动参数用双引号引起来

SpecFlow C#Regex可选参数用双引号引起来