我正在尝试创建一个小的批处理文件以静默安装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
存储在同一位置。
答案 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