Batch file 如何运行存储在变量中的.exe文件?
我正在尝试创建一个小的批处理文件,以便以静默方式安装Firefox 我想将可执行文件名存储到变量(SETUP_64或SETUP_32)中。这将允许我在不修改脚本的情况下更改文件版本Batch file 如何运行存储在变量中的.exe文件?,batch-file,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 ( star
@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存储在同一个位置。下面是执行该任务的一个想法,它假设您乐于运行可执行文件,而不管是否已安装了现有版本的Firefox
@Echo关闭
如果已定义,则处理器\u架构为6432(
启动“/D”%\uuuuu CD\uuuuuu%”“%SystemRoot%\SysNative\cmd.exe”/C“%~f0”&退出/B)
如果%PROCESSOR\u架构:~-2%Equ 86(调用:Sub 32)否则调用:Sub 64
暂停
后藤:EOF
:Sub
对于(“%$dp0Firefox-*-%1.exe”)中的%%A,请执行(启动“/”等待“%%A”
如果没有错误,则返回级别1(完成)
退出/B
这是通过确保适当版本的cmd.exe
首先运行批处理文件来实现的。这是必要的,因为如果32位版本的cmd.exe
在x64
系统上运行脚本,%PROCESSOR\u ARCHITECTURE%
变量值将为x86
。但是,当32位版本的cmd.exe
在x64
系统上运行时,定义了一个新的环境变量%PROCESSOR\u architecew6432%
,它不存在于x64
系统上的64位cmd.exe
或x86
系统上的32位cmd.exe中。一旦脚本以正确的位版本cmd.exe
运行,我们就可以依靠%PROCESSOR\u ARCHITECTURE%
的输出来运行适当的可执行文件
作为补充说明,Firefox可执行文件(本质上只是自解压7z归档文件)似乎具有完全相同的名称,而不管您下载的是哪个比特版本,例如Firefox Setup 66.0.2.exe
。这意味着问题中的可执行文件必须已重命名,因此您可以将其重命名为任何您想要的名称。如果使用相同的重命名方案,但使用-86
而不是-32
,则代码也可以简化一点:
@Echo关闭
如果已定义,则处理器\u架构为6432(
启动“/D”%\uuuuu CD\uuuuuu%”“%SystemRoot%\SysNative\cmd.exe”/C“%~f0”&退出/B)
对于(“%~dp0Firefox-*-%PROCESSOR\u体系结构:~-2%.exe”)中的%%A,请执行以下操作(
开始“/”等待“%%A”
如果没有错误,1级回显完成
(停顿)
我移动了一个报价,并添加了静默安装标志
@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
START
命令将第一个引用的参数视为窗口标题。所以你需要一组空的引号<代码>启动“%SETUP”\u 64%
。最好的做法是不要给变量赋值引号,但要用引号来保护特殊字符和变量的尾随空格set“SETUP\u 64=Firefox-*-64.exe”
@Squashman非常感谢您的回答。它似乎起作用了。唯一的问题是,我的脚本很难找到“Firefox-*-64.exe”。但是,如果我将全名放在变量中(不带*),它就起作用了。有什么想法吗?@Compo这是否意味着我必须重命名我的文件Firefox-*-AMD64.exe
?什么是:~-2
不要使用环境变量处理器架构
。当批处理文件由32位cmd.exe
执行时,它的值为x86
,因为应用程序启动了批处理文件也是一个32位应用程序,正如Microsoft在关于的文章中所述。如果“%ProgramFiles(x86)==”(设置为“FireFoxArchitecture=32”),我建议使用类似于的方法,否则设置为“FireFoxArchitecture=64”
。双击C:\Windows\SysWOW64\cmd.exe
并运行set proc
,您会发现我是对的。在安装Firefox之前,请先验证Firefox是否尚未安装,以及它的版本,然后再在已安装的新版本上安装旧版本。请参阅示例。遗憾的是,问题仍然是“找不到Firefox*64.exe”。感谢您的回答,我将尝试理解并使用此脚本。