我键入了这个,但它根本不起作用
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。
答案 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
当call
和if
的模糊范围让我感到困惑时,有时会发出for
这样的陈述。我承认这是一种愚蠢和浪费,但是对于你的生活和继续前进是很好的。 :)