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

时间:2015-07-26 13:12:27

标签: batch-file

以下代码应该从文件夹安装一些.exe文件。但是,for循环似乎不起作用。我也试过current batch directory/files/exe

如果是64位计算机,请将目录设置为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 ) ) 然后安装该目录中找到的所有EXE。

console.log(e)

1 个答案:

答案 0 :(得分:1)

Kiera Smith,此问题与您发布的this one类似。

您发布的代码存在一些错误和未使用的代码,因此很难回答它。但是,我试过了。

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

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

目前还不清楚大多数外()内的区块是否应该是 if 条件的区块。目前情况并非如此,因为 if 条件仅适用于set arch=x64。打开{strong> if 块的(必须与关键字相同,如果,则条件和set arch=x64将被移动到块中而不是外部

分配给变量ver的Windows版本根本没有进一步处理。

第二个 for 循环的

/r导致在指定文件夹和所有子文件夹中对*.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上) 64。

处理器体系结构与安装x86或x64可执行文件无关。重要的是哪个版本的Windows正在处理批处理文件。如果未安装4 GB以上的x64处理器,则可以在具有x64处理器的计算机上使用,并且x86驱动程序也可用于计算机的硬件组件。另请参阅Why %processor_architecture% always returns x86 instead of AMD64

EXE文件的路径是:

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

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