未提供第二个参数时批处理文件出错

时间:2014-03-24 00:32:11

标签: batch-file

这是一个批处理文件,如果没有提供,我需要将第二个参数设置为某个路径,否则进一步使用第二个参数的值。请注意,我需要在文件

中进一步访问EXECUTE_DIR的值

dummy.bat

IF %2 == "" (
SET EXECUTE_DIR = "c:\Program Files"
) ELSE (
SET EXECUTE_DIR = %2
)

ECHO exedir = %EXECUTE_DIR%

-

当我只提供1个参数时,我得到以下输出:

D:> dummy.bat" Lab"

(此时出乎意料。

D:> IF =="" (

d产品:>

1 个答案:

答案 0 :(得分:1)

你需要

if "%2"=="" ....

比较运算符的两边必须完全匹配。如果%2不存在,则代码将解析为

if =="" ...

这显然是报告的语法错误。

我的首选版本是

set "var=%~2"
if not defined var ...

可以方便地将%2的值与删除的引号一起分配给var

当然,如果更方便的话,你可以使用if defined var...

同时,您的)else(也会产生错误。您必须在else的两边都有空格,否则cmd不知道您是在调用else子句还是)else(是某种变量或选项或其他什么

)(也必须与else关键字(您拥有)位于同一物理行。

(belay that - 比例空间ib无格式文本使空间难以发现......)

但这提出了另一个观点 - Batch对SET语句中的空格很敏感。 SET FLAG = N将名为“FLAG Space ”的变量设置为值“ Space N”。 set "var=value"语法确保批处理行上的任何尾随空格不包含在分配给var的值中。