【问题标题】:Batch command using both wait and timeout使用等待和超时的批处理命令
【发布时间】:2017-08-15 21:19:44
【问题描述】:

我正在尝试一个接一个地安装多个程序。如何等待一个应用的设置完成,并在持续超过 600 秒时终止?

到目前为止,这是我的代码:

ECHO "Installing 7-Zip 16.04 (x64 edition)"
START "7-Zip 16.04 (x64 edition)" /WAIT msiexec -i "7z1604-x64.msi" /qn
ECHO "Installing Foxit Reader"
START "Foxit Reader" /WAIT "FoxitReader821_enu_Setup.msi" /verysilent

【问题讨论】:

    标签: batch-file installation windows-installer


    【解决方案1】:

    您应该可以使用pslist from PsTools https://docs.microsoft.com/en-us/sysinternals/downloads/pstools 来检查进程是否正在运行。

    :ZIPCHECK
    REM Use the actual process name here, obviously
    pslist /accepteula | findstr /I "7\-zip" > file.txt
    set INS_PRCNAM=
    for /F "tokens=1" %%A in (file.txt) do set INS_PRCNAM=%%A
    if "%INS_PRCNAM%" == "" goto ZIPDONE
    REM Put timer logic here, including either a sleep.exe or sleep.ps1 utility
    goto ZIPCHECK
    :ZIPDONE
    
    REM Cleanup
    :ENDIT
    if EXIST file.txt del /Q file.txt
    set INS_PRCNAM=
    

    您可以在其他地方找到计时器逻辑,但通常使用%DATE% 和%TIME% 环境变量和SET 命令的文本修改功能,以及来自SET /A 的算术支持。

    可以通过pskill 实用程序(也来自PsTools 工具包)完成终止。

    或者,您可以使用 PowerShell:

    powershell "Get-Process -Name '7-Zip'" > file.txt
    

    【讨论】:

    • 似乎防病毒软件不喜欢它。谢谢你的回答。
    • 由于这些是标准工具,我倾向于向您的防病毒供应商提交“误报”报告。可以让您在一周内启动并运行。
    • 我添加了一条关于如何使用 PowerShell 进行操作的说明。您可以在此基础上进行扩展并在 PowerShell 中完成所有工作,但显示的单行代码可以替代 pslist | findstr 行。
    【解决方案2】:

    为什么不使用 PSAppDeployToolkit。这会让你的生活更轻松吗?

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2017-11-22
      • 1970-01-01
      • 2013-01-08
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多