使用 if 语句后跟调用似乎在批处理文件中不起作用

Posted

技术标签:

【中文标题】使用 if 语句后跟调用似乎在批处理文件中不起作用【英文标题】:Using an if statement followed with a call doesn't seem to work in a batch file 【发布时间】:2021-11-03 03:14:35 【问题描述】:

我在批处理文件中有以下代码行,暂时命名为 DriveBackup:

if %1%NOTSET==NOTSET call :finish 4

如果输入参数没有设置/给定,我调用完成的例程。我正在尝试传入一个错误代码(在本例中为 4),以便完成的例程在批处理文件终止之前吐出有用的错误消息。我明白了(回声开启)...

C:\Users\Daniel\Desktop>DriveBackup
4 was unexpected at this time.
C:\Users\Daniel\Desktop>if finish 4
C:\Users\Daniel\Desktop>

以下行代替它的工作......if %1%NOTSET==NOTSET goto donothing(无操作)

看起来“呼叫”正在退出。我如何不正确地拨打电话?你不能使用if条件来触发调用吗?完成例程位于批处理文件本身中。这不是对另一个批处理文件的调用。

【问题讨论】:

参数只有一个前导%,而不是两边都有一个。另外,最好使用引号而不是其他文本,以防参数包含批量具有特殊含义的某些字符,因此请尝试if "%~1"=="" call :finish 4 为了更清楚地打开命令提示符窗口,键入call /? 并按[ENTER] 键。您清楚地知道,只要启用了扩展,(默认情况下它们是),您就可以将参数传递给脚本中的标签,但重要的部分是它向您展示了这些参数如何被定义。您会注意到参数前面有一个百分比字符,它们没有包含在百分比字符之间。它还应该解释上面评论中使用的%~1 的含义。 goto donothing 替换为goto :donothing,你会遇到同样的问题…… 【参考方案1】:

如果您想知道为什么 call :label 失败,但 goto label 有效...

这是因为百分号偏离了 表达式 %1% 将被评估为 %1 和单个 %。 尾随百分比用作变量的起始字符。 当在该行中找不到其他百分号时,仅删除百分号,而其余行将保持不变。 但是在您的call :label 的情况下,冒号用作特殊变量语法,从百分号到冒号的部分是变量名,但没有名为NOTSET==NOTSET call 的变量,因此这部分将从中删除这条线,你得到了这条线:

if :finish 4

这不是 IF 语句的有效语法

【讨论】:

以上是关于使用 if 语句后跟调用似乎在批处理文件中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果语句在模板文件中不起作用

fillOval() 在 if 语句中不起作用[关闭]

else 在 if 语句中不起作用

$ timeout函数在if语句中不起作用

基本的 If else 语句在 javascript 中不起作用

if 语句比较在目标 c 中不起作用的整数