0

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

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。

4

2 回答 2

3

你有2个问题。

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"
于 2013-01-24T21:41:26.607 回答
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,当我的模糊范围iffor困惑时,我会做这样的陈述。我承认这很老套和浪费,但它非常适合给你的生活贴上创可贴并继续前进。:)

于 2013-01-24T21:19:12.940 回答