Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件-如果语法错误_Batch File - Fatal编程技术网

Batch file 批处理文件-如果语法错误

Batch file 批处理文件-如果语法错误,batch-file,Batch File,在命令提示符下运行此批处理文件时,出现以下错误: 该命令的语法不正确 这与我的IF语句有关,但据我所知,我的语法是正确的-包括确保括号周围有必要的空格: SET foo=bar :: test IF "%foo%" EQU "bar" ( :: foo ECHO "equal to" ) ELSE ( :: bar ECHO "not equal to" ) 试着这样做: SET foo=bar :: test IF "%foo%" EQU "bar" ( rem

在命令提示符下运行此批处理文件时,出现以下错误:

该命令的语法不正确

这与我的
IF
语句有关,但据我所知,我的语法是正确的-包括确保括号周围有必要的空格:

SET foo=bar

:: test
IF "%foo%" EQU "bar" (
  :: foo

  ECHO "equal to"

) ELSE (
  :: bar

  ECHO "not equal to"
)
试着这样做:

SET foo=bar

:: test
IF "%foo%" EQU "bar" (
  rem foo

  ECHO "equal to"

) ELSE (
  rem bar

  ECHO "not equal to"
)
SET foo=bar

:: test
IF "%foo%" EQU "bar" (
  ::foo
  ECHO "equal to"

) ELSE (
  ::bar
  ECHO "not equal to"
)
或者像这样:

SET foo=bar

:: test
IF "%foo%" EQU "bar" (
  rem foo

  ECHO "equal to"

) ELSE (
  rem bar

  ECHO "not equal to"
)
SET foo=bar

:: test
IF "%foo%" EQU "bar" (
  ::foo
  ECHO "equal to"

) ELSE (
  ::bar
  ECHO "not equal to"
)

这是
cmd.exe
中的一个错误。标签(在本例中,
被视为标签)在括号上下文中不起作用

问题在于您对备注(:)使用标签

::只能安全地用于块外的备注。在块内部,它将尝试执行下一行,因为它假定标签后面跟着一个命令

标签备注后的空行导致错误

可以移除空白行以删除错误。在这种情况下,解析器假定label和echo命令是要执行的命令

试试这个:

SET foo=bar
:: test
IF "%foo%" EQU "bar" (
  :: foo
  ECHO "equal to"

) ELSE (
  :: bar
  ECHO "not equal to"

)
更安全的选择是使用real remark命令:

SET foo=bar
rem test
IF "%foo%" EQU "bar" (
  rem foo

  ECHO "equal to"

) ELSE (
  rem bar

  ECHO "not equal to"
)

更多信息请参见

我发誓,我会用一个生锈的spork将批处理文件语法的作者的内脏取出!给这家伙一些信任。最初的command.com是在严格的RAM约束下运行的程序集中创建的,批处理支持可能是事后添加的。问题是,在这个时代,你为什么还要继续折磨自己写批处理文件:)Windows Azure云服务启动脚本:/不要使用标签作为注释。