Batch file 如何根据处理器体系结构使用批处理文件在文件夹中安装所有.exe?

Batch file 如何根据处理器体系结构使用批处理文件在文件夹中安装所有.exe?,batch-file,Batch File,下面的代码应该安装文件夹中的一些.exe文件。然而,for循环似乎不起作用。我也试过!pathexe 如果是64位计算机,请将目录设置为当前批处理目录/files/exe 然后安装在该目录中找到的所有EXE cls echo. setlocal enableDelayedExpansion if %PROCESSOR_ARCHITECTURE%==AMD64 set arch=x64 ( set filesexe=files/exe set pathexe=%~dp0!files

下面的代码应该安装文件夹中的一些.exe文件。然而,for循环似乎不起作用。我也试过
!pathexe

如果是64位计算机,请将目录设置为
当前批处理目录/files/exe

然后安装在该目录中找到的所有EXE

cls
echo.
setlocal enableDelayedExpansion
if %PROCESSOR_ARCHITECTURE%==AMD64 set arch=x64
(
    set filesexe=files/exe
    set pathexe=%~dp0!filesexe!
    echo !pathexe!
    setlocal disableDelayedExpansion
    for  "%pathexe%" %%m in ("*.exe") do (
        start "" /w  %%m
    )
)

setlocal enableDelayedExpansion
if %PROCESSOR_ARCHITECTURE%==x86 set arch=x86
(
    for /F "tokens=4-5 delims=[.] " %%A in ('ver') do set ver=%%A.%%B
    set filesexe=files/86/exe
    set pathexe=%~dp0!filesexe!
    echo !pathexe!
    setlocal disableDelayedExpansion
    for  "%pathexe%" %%m in ("*.exe") do (
        start "" /w  %%m
    )
)
,此问题与您发布的问题类似

您发布的代码有一些错误和未使用的代码,因此很难回答。然而,我还是尝试了

首先,圆括号之间的所有内容都是一个块
cmd.exe
解析整个块,并展开已解析该块的百分号内的所有变量引用。因此,循环的第二个中的
%pathexe%
在定义之前就已展开,即替换为空字符串

第二,环境变量
arch
没有在任何地方使用,尽管有一个额外的if条件来定义它

不清楚大多数外部
中的块是否应为if条件下的块。目前情况并非如此,因为if条件仅适用于
set arch=x64
。打开
if块的
必须与条件后的关键字if在同一行,并且
set arch=x64
将移动到块中而不是外部

分配给变量
ver
的Windows版本根本不会进一步处理

第二次
/r
for
循环导致在指定文件夹和所有子文件夹中递归搜索
*.exe
。真的需要这样做吗

您是否曾经在命令提示符窗口中运行批处理文件,并在第一行中使用了
echo on
而不是
echo off

这将使调试命令行解释器在执行批处理文件时真正解释的内容成为可能


在提供更完整代码后编辑:

看起来您的整个代码可以简化为以下几行:

@echo off
cls
echo.
setlocal DisableDelayedExpansion
if "%ProgramFiles(x86)%"=="" (set "arch=\86") else (set "arch=")
set "pathexe=%~dp0files%arch%\exe"
for %%I in ("%pathexe%\*.exe") do start "Running %%~nI" /wait "%%I"
endlocal
甚至更多地减少:

@echo off
cls
echo.
if "%ProgramFiles(x86)%"=="" (set "arch=\86") else (set "arch=")
set "pathexe=%~dp0files%arch%\exe"
for %%I in ("%pathexe%\*.exe") do start "Running %%~nI" /wait "%%I"
环境变量
arch
要么用字符串
\86
初始化,要么删除(如果存在),具体取决于环境变量ProgramFiles(x86)的存在,该变量仅存在于Windows x64上

处理器体系结构与安装x86或x64可执行文件无关。它与处理批处理文件的Windows版本有关。如果未安装超过4 GB的处理器,并且x86驱动程序也可用于计算机的硬件组件,则可以在配备x64处理器的计算机上使用Windows x86。请参阅还有

EXE文件的路径为:

  • %~dp0
    引用并始终以反斜杠结尾的批处理文件的路径
  • 加上固定目录名
    文件
  • 在Windows x86上加上字符串
    \86
    (反斜杠作为目录分隔符+目录名
    86
    ),或者在Windows x64上不加任何内容
  • 加上一个反斜杠作为目录分隔符和目录名
    exe

然后,此目录中的每个
.exe
文件都将使用命令start启动,批处理文件处理将始终停止,直到每个启动的应用程序自行终止。

您粘贴了一个不完整的脚本,或者尚未关闭内部循环:添加
在结尾。它与循环闭合不起作用为什么在
之后有一个开口
如果
?它在这里没有任何作用,如果您删除这一行(以及最后一行
),代码似乎起作用。这只是代码的一部分。还有一个32位的部分,请粘贴整个代码。非常感谢@Mofi。效果很好。问题是,我现在如何将命令行参数传递给安装路径。例如,我想运行:
I:\pt\files\exe\firts.exe/?
另外,如何将
%%~nI
的值打印到屏幕上?echo
%%~nI
无法将参数传递给已启动的可执行文件,请在
“%%I”
之后追加参数,例如
“%%I”/?
。如果要将传递的参数传递给批处理文件本身,请使用
“%%I”%*
。在命令提示窗口中运行
call/?
,了解有关参数引用的详细信息。首先,阅读说明从批处理文件中运行可执行文件的不同方法。您希望在哪个窗口中查看
echo%%~nI
的输出?如果已启动的可执行文件是控制台而不是GUI应用程序,则可以在批处理文件的窗口中或在通过命令start打开的窗口中输出,并使用title
Running%%~nI
。顺便说一句:如果要启动的所有可执行文件都是控制台应用程序,
start“Running%%~nI”/wait