Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何运行存储在变量中的.exe文件?_Batch File - Fatal编程技术网

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

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

我正在尝试创建一个小的批处理文件,以便以静默方式安装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存储在同一个位置。下面是执行该任务的一个想法,它假设您乐于运行可执行文件,而不管是否已安装了现有版本的
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”。感谢您的回答,我将尝试理解并使用此脚本。