【发布时间】:2011-02-02 06:17:00
【问题描述】:
我需要测试是否设置了变量。我尝试了几种技术,但每当%1 被引号包围时它们似乎都失败了,例如%1 是"c:\some path with spaces" 的情况。
IF NOT %1 GOTO MyLabel // This is invalid syntax
IF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat execution
IF %1 == GOTO MyLabel // Gives an unexpected GOTO error.
根据this site,这些是受支持的IF 语法类型。所以,我看不出有什么办法。
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
更新:在 2020 年 10 月 25 日,我将接受的答案从使用括号更新为使用波浪号。每个人都说波浪号更好,因为它更安全。我有点心烦意乱,因为波浪号看起来更复杂,而且不太清楚它的目的是什么,但我还是改变了它。
【问题讨论】:
-
在我的系统(Windows 2003 和 Windows 7)上,
if "%1" == "" GOTO MyLabel不会致命地终止脚本的执行,只要%1有偶数个双引号。我看到%1中的奇数个双引号会导致脚本的执行出现此错误:The syntax of the command is incorrect.下面使用方括号解决问题的解决方案已被标记为正确答案,但事实并非如此似乎做得更好。当%1有奇数个双引号时,该解决方案也会失败并出现相同的错误。 -
@SusamPal 有趣。试试它下面的括号版本,看看是否有效。那个我测试了更多。几天前我刚刚更新了接受的答案。
-
Dan Story's answer 似乎确实可以正常工作。我使用方括号的版本。
-
一个很好的“包罗万象”示例:stackoverflow.com/questions/830565/… 涵盖文件/目录和通用字符串/数字混合参数。
-
太令人沮丧了——
IF DEFINED只处理环境变量而不是脚本变量真是浪费潜力!
标签: windows shell batch-file cmd