使用 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 语句后跟调用似乎在批处理文件中不起作用的主要内容,如果未能解决你的问题,请参考以下文章