【发布时间】:2018-07-20 21:52:00
【问题描述】:
我正在尝试创建一个静默运行多个 setup .exe 的脚本,无论出于何种原因,当我在批处理文件中静默执行 7zip 安装时,之后不会执行其他命令。
有点不知所措。我试过暂停、回声、其他只是回声的子例程(返回后工作并执行命令)。
但无论出于何种原因,在我执行 7zip.exe /S 之后,即使从我为安装它所做的子例程返回,它也会退出执行命令。
@echo OFF
SET 7ZipName=7z*.exe
SET x86SetupFilePath=C:\PSDARS-Setup\x86\
SET x64SetupFilePath=C:\PSDARS-Setup\x64\
SET x647ZipPath=C:\Program Files\7-Zip\
SET x867ZipPath=C:\Program Files (x86)\7-Zip\
:: 1. Check for OS architecture
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT
if %OS%==32BIT GOTO :32BIT
if %OS%==64BIT GOTO :64BIT
:32BIT
:: Check arguments 1 = Installation Directory Path. If not set use base above
IF NOT %1.==. SET x86SetupFilePath=%~1
::Install 7zip
CALL :Install7Zip
setx PATH "%PATH%;%x647ZipPath%" /m
GOTO :ProgramEnd
:64BIT
:: Check arguments 1 = Installation Directory Path
IF NOT %1.==. SET x64SetupFilePath=%~1
::Install 7zip
CALL :Install7Zip
CALL :Test
Echo 7zip Installation Complete
::setx PATH "%PATH%;%x647ZipPath%" /m
GOTO :ProgramEnd
:Test
Echo a
GOTO :EOF
:: Author: Jacob Howarth
:: Date: 07/20/18
:: Description: This procedure will install the correct version of
:: the 7zip installer silent based on the architecture of the OS
::
:Install7Zip
IF %OS%==32BIT cd "%x86SetupFilePath%"
IF %OS%==64BIT cd "%x64SetupFilePath%"
for %%f in (%7ZipName%) do SET File=%~f
%File% /S
ECHO.%ERRORLEVEL%
GOTO :EOF
:: End of Install7Zip
echo 7zip Installation Complete
:ErrorInstall7Zip
echo Error installing 7zip for %OS% OS. x64 path = %x64SetupFilePath%, x86 path =%x86SetupFilePath%.
:ProgramEnd
【问题讨论】:
-
我能看到的每条代码路径都以
GOTO :ProgramEnd结尾,:ProgramEnd之后就没什么可做的了。你预计会发生什么? -
为什么要检查 CPU 的位数? 64位CPU可以安装32位操作系统.
-
如果代码:SET File=%~f,则此行中缺少百分号。也不要以数字开头的变量名。它可以看作是一个命令行参数。
-
命令行
setx PATH "%PATH%;%x647ZipPath%" /m绝对是NO GO - NEVER EVER。由于各种原因,您正在使用该命令行破坏 system 环境变量PATH。参见例如Why are other folder paths also added to system PATH with SetX and not only the specified folder path? 或Adding the current directory to Windows path permanently。确实没有必要将 7-Zip 程序文件路径添加到 systemPATH,否则 7-Zip 设置会这样做。 -
我很欣赏建设性的改变,但这些都没有真正回答为什么在执行 7zip 的设置后它不执行任何命令的问题。 @Mofi 7zip 显然不会被添加到任何路径变量系统或以其他方式静默安装。我已经检查过了,我没有看到它。我会检查它是否与导致错误的for变量有关。
标签: windows batch-file command-line