【问题标题】:Using an if statement followed with a call doesn't seem to work in a batch file使用 if 语句后跟调用似乎在批处理文件中不起作用
【发布时间】: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,你会遇到同样的问题……

标签: if-statement batch-file


【解决方案1】:

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

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

if :finish 4

这不是 IF 语句的有效语法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多