我需要能够在 x86 和 x64 机器上运行此批处理以检查程序是否已正确安装。
我们有一个应用程序,在 x86 中安装在标准程序文件目录中,在 x64 中安装时,它安装在 x86 程序文件目录中。
目前它false
在 x86 和 x64 上运行时会报告、显示应用程序已安装的回显和应用程序未安装的回显。
if /i "%processor_architecture%"=="x86" GOTO X86DC
if /i "%processor_architecture%"=="X64" GOTO X64DC
:X86DC
if exist "C:\Program Files\installeddir\app.exe" ( echo ***App is Installed Successfully*** )
if not exist "C:\Program Files\installeddir\app.exe" ( echo ***App is not installed *** )
:X64DC
if exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is Installed Successfully*** )
if not exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is not installed*** )
答案1
这样不是更清楚吗?还消除了上面@MBu 指出的对processor_architecture变量做出假设的问题。
if defined ProgramFiles(x86^) (
set appDir=%ProgramFiles(x86^)%\installeddir
) else (
set appDir=%ProgramFiles%\installeddir
)
if exist %appDir%\app.exe (
echo We're installed in %appDir%. Woo hoo!
) else (
echo Nope. Not installed.
)
我刚刚想到的另一种方法是让安装程序或批处理文件将安装位置写入注册表(可以使用标准 Windows 实用程序 reg.exe 完成)。我很乐意实现那如果您有兴趣的话,可以进一步了解解决方案。
笔记:“ProgramFiles(x86^)” 右括号必须转义,否则多行 IF/FOR 将无法工作,因为会错误地以“)”结尾。最好总是将其转义,将来可能会在 IF 内。
答案2
在 x86 上运行时,脚本将执行两个代码块:针对 x86 和 x64。您必须在标签goto :eof
前插入或在脚本末尾:x64dc
添加另一个标签(例如),然后在标签前插入:end
goto end
:x64dc
另一个问题是变量的值%processor_architecture%
。我的机器(Windows 7 x64)返回AMD64
,而不是X64
。所以在我的情况下,两条if
指令都没有导致跳转,所以再次执行了两个代码块。
看这个问题获取所有可能值的列表%processor_architecture%
。
答案3
使用if
和else if
构造else
:
if /i "%processor_architecture%"=="x86" (
if exist "C:\Program Files\installeddir\app.exe" (
echo ***App is Installed Successfully***
) else (
echo ***App is not installed ***
)
) else if /i "%processor_architecture%"=="X64" (
if exist "C:\Program Files(x86)\installeddir\app.exe" (
echo ***App is Installed Successfully***
) else (
echo ***App is not installed***
)
)