批处理脚本不将变量设置为值

时间:2013-01-24 21:01:27

标签: windows batch-file

我键入了这个,但它根本不起作用

set ifpath=C:\Program Files\App

if exist %ifpath% SET ppath=C:\Program Files ELSE SET ppath=C:\Program Files(x86)

echo "%ppath%\App"

简单但我花了好几个小时试图让脚本工作。它在回显时不断丢失ppath。如果我删除条件并简单地将ppath设置为路径,则显示。

目标是检测Program Files(x86)是否存在,然后安装在那里,如果它存在,否则只安装Program Files。

2 个答案:

答案 0 :(得分:3)

你有两个问题。

1)必须引用%ifpath%因为它包含空格。如果没有引号,IF EXIST认为名称会停止第一个空格。

2)批处理解析器不知道SET命令的值何时结束。它将ELSE子句视为值的一部分。用括号很容易解决这个问题。

set "ifpath=C:\Program Files\App"
if exist "%ifpath%" (SET ppath=C:\Program Files) ELSE SET ppath=C:\Program Files(x86)
echo "%ppath%\App"

让我们假设你颠倒了测试并开始使用(x86)版本。简单地添加括号不会解决问题,因为解析器会认为值在(x86)的第一个括号处结束。这可以通过逃避来解决:

set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET ppath=C:\Program Files(x86^)) ELSE SET ppath=C:\Program Files
echo "%ppath%\App"

或者更好的方法是使用引号:

set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET "ppath=C:\Program Files(x86)") ELSE SET "ppath=C:\Program Files"
echo "%ppath%\App"

答案 1 :(得分:1)

你可以这样做:

if exist "%ifpath%" ( call :PF ) else ( call :PFx86 )
:PF
set "ppath=c:\Program Files"
goto :EOF
:PFx86
set "ppath=c:\Program Files(x86)"
goto :EOF

callif的模糊范围让我感到困惑时,有时会发出for这样的陈述。我承认这是一种愚蠢和浪费,但是对于你的生活和继续前进是很好的。 :)