如何运行存储在变量中的.exe文件?

时间:2019-04-04 14:58:35

标签: batch-file

我正在尝试创建一个小的批处理文件以静默安装Firefox。

我想将可执行文件名存储到变量(SETUP_64或SETUP_32)中。这样一来,我无需编辑脚本即可更改文件版本。

@echo off
SETLOCAL

set SETUP_64="Firefox-*-64.exe"
set SETUP_32="Firefox-*-32.exe"

if %processor_architecture% == AMD64 (
  start %SETUP_64%

) else (
  start %SETUP_32%
)


Echo DONE

PAUSE
ENDLOCAL

问题是该脚本无法正常工作。谁能帮我找到解决方案?

除了start %variable%之外还有其他命令吗?也许我的变量错了吗?

可执行文件与脚本install.bat存储在同一位置。

2 个答案:

答案 0 :(得分:1)

这是执行任务的一种方法,它假定您很乐意运行可执行文件,而不管是否已经安装了Firefox的现有版本。

@Echo Off
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
If %PROCESSOR_ARCHITECTURE:~-2% Equ 86 (Call :Sub 32)Else Call :Sub 64
Pause
GoTo :EOF

:Sub
For %%A In ("%~dp0Firefox-*-%1.exe")Do (Start "" /Wait "%%A"
    If Not ErrorLevel 1 Echo Done)
Exit /B

这可以通过确保首先运行相应版本的cmd.exe来运行批处理文件。 这是必需的,因为如果cmd.exe的32位版本在x64系统上运行脚本,则%PROCESSOR_ARCHITECTURE%变量值将为x86。但是,当cmd.exe的32位版本运行在x64系统上时,将定义一个新的环境变量%PROCESSOR_ARCHITEW6432%,该变量在64位cmd.exe中不存在x64系统或cmd.exe系统上的32位x86一旦脚本以正确的cmd.exe版本运行,我们就可以依靠在%PROCESSOR_ARCHITECTURE%的输出上运行适当的可执行文件。

作为补充说明,Firefox可执行文件本质上只是自解压的7z归档文件,它们的名称似乎完全相同,无论您下载的是哪个版本(例如, Firefox Setup 66.0.2.exe。这意味着问题中的可执行文件必须已被重命名,因此您可以将它们重命名为任何您想要的名称。如果您使用相同的重命名方案,而使用-86而不是-32,那么您也可以稍微简化一下代码:

@Echo Off
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
For %%A In ("%~dp0Firefox-*-%PROCESSOR_ARCHITECTURE:~-2%.exe")Do (
    Start "" /Wait "%%A"
    If Not ErrorLevel 1 Echo Done
    Pause)

答案 1 :(得分:0)

我移动了引号,并添加了无提示安装标志。

@echo off
SETLOCAL

set "SETUP_64=Firefox*64.exe"
set "SETUP_32=Firefox*32.exe" 

if %processor_architecture% == AMD64 (
  start %SETUP_64% -ms

) else (
  start %SETUP_32% -ms
)


Echo DONE

PAUSE
ENDLOCAL