这是一个批处理文件,如果没有提供,我需要将第二个参数设置为某个路径,否则进一步使用第二个参数的值。请注意,我需要在文件
中进一步访问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产品:>
答案 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
的值中。