我有一个运行的批处理文件:
for /R C:\some\Directory\target\ %%f in (*.bat) do (call "%%f")
它最终会循环遍历一个 bat 文件,并且必须重新启动,有没有办法让它在重新启动后继续循环?我在 SuperUser 上读到过类似 resume 的内容,但我没有看到它在这里如此快速地实现。有什么办法可以实现它吗?该脚本旨在被调用并在设备上安装软件,但它在重新启动后停止。有没有办法让批处理文件继续执行其他软件?
答案1
@echo off
setlocal enabledelayedexpansion
set "_batch_dir=C:\some\Directory\target"
set "_KeyRunOnce=HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"
if not "%~1" == "" (set "_skp=skip=%~1" && set "_count=%~1")else set "_count=1"
for /f %%i in ('dir /b /s /aa "%_batch_dir%\*.bat" ^| find /v /c ""')do set /a "_total=%%~i"
for /f "%_skp% delims=" %%i in ('2^>nul where.exe /r "%_batch_dir%" "*.bat"')do if !_count! lss !_total! =;(
reg add "%_KeyRunOnce%" /v "%~n0" /d "\"%~f0\" \"!_count!\"" /f && set /a "_count+=1" );= 1>nul 2>&1 & call "%%~i"
1>nul 2>&1 reg delete "%_KeyRunOnce%" /v "%~n0" /f & endlocal
1.首先计算要运行的 bat 文件的总数
2.获取总数,检查当前执行是否为初始、间隔或最后一次
3.添加一个计数器,并通过它执行计数器的值并使用该指标进行相关的连续性执行。
4.定义哪个球拍开始、继续和结束,并使用以下建议的参数和RunOnce
关键点@tabby.sl
5.替换For /R
为For /F
并在 RunOnce 中使用计数器作为参数,并使用参数skip
作为For /F skip=Argument