批处理文件检查目录存在于x64和/或x86中


2

我需要能够在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*** )

Answers:


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完成)。我很乐意去做肉体 如果你有兴趣,可以解决一些问题。


1

在x86上运行时,您的脚本将执行两个代码块:对于x86和x64。你必须插入 goto :eof 就在此之前 :x64dc 标签或添加另一个标签(比如说 :end )在脚本的末尾插入 goto end 就在此之前 :x64dc 标签

另一个问题是价值 %processor_architecture% 变量。我的机器(Windows 7 x64)返回 AMD64不是 X64。所以在我的情况下都没有 if 指令导致跳转,因此再次执行两个代码块。

看到 这个问题 列出所有可能的 %processor_architecture% 值。


1
没必要 :end 标签,已经有了 :eof 内置的。
Vlastimil Ovčáčík

谢谢,你是对的。在撰写本文时,我不确定是否 :EOF 适用于所有情况。我编辑了我的答案并包含了你的建议。
MBu

0

使用 ifelse ifelse 结构体:

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***
    )
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.