以下代码应该从文件夹安装一些.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)
答案 0 :(得分:1)
Kiera Smith,此问题与您发布的this one类似。
您发布的代码存在一些错误和未使用的代码,因此很难回答它。但是,我试过了。
首先,圆括号之间的所有内容都是一个块。 cmd.exe
解析整个块并在解析块时已经扩展了百分号内的所有变量引用。因此,第二个 for 循环中的%pathexe%
在完全定义之前已经展开,即替换为空字符串。
其次,环境变量arch
在任何地方都没有使用,尽管有一个额外的 if 条件来定义它。
目前还不清楚大多数外(
和)
内的区块是否应该是 if 条件的区块。目前情况并非如此,因为 if 条件仅适用于set arch=x64
。打开{strong> if 块的(
必须与关键字相同,如果,则条件和set arch=x64
将被移动到块中而不是外部
分配给变量ver
的Windows版本根本没有进一步处理。
/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
,\86
(反斜杠作为目录分隔符+目录名86
)或在Windows x64上没有任何内容,exe
。然后,使用命令 start 启动此目录中的每个.exe
文件,并始终停止批处理文件处理,直到每个已启动的应用程序自行终止。