如果超过一分钟就退出循环 Windows 批处理文件
Get out of loop if more than one minute Windows Batch file
如果满足特定条件,我正在尝试删除 Windows 服务器上的文件夹。如果不满足,则等待 10 秒并循环,再次检查条件。我还需要确保我不会永远处于循环中。 (检查我是否在循环中超过 60 秒,然后退出循环)。批处理文件看起来像这样:
C:\postgresql\uninstall-postgresql.exe --mode unattended
set TIMESTAMP1=%TIME%
:deleteFolder
tasklist /V |findstr /i "_uninstall*" >nul
if %errorlevel% == 0 (timeout /T /10 >nul
set TIMESTAMP2=%TIME%
**REM I want to make sure that we get out of this loop if the diff b/w TIMESTAMP2
AND TIMESTAMP1 IS MORE THEN 60 SECONDS**
goto deleteFolder
) ELSE (
if exists C:\postgresql RD /Q /S C:\postgresql)
Command 1
Command 2
Command 3
因此,我正在尝试从 windows 服务器卸载 Postgresql,通过检查任务列表确保卸载完成,然后删除 basedir (C:\postgresql)。如果卸载进程还是运行,那就等10秒再查看任务列表。我只是想确保我不会永远陷入循环。
提前致谢
更简单的方法是使用计数来打破循环
@Echo off & Set Count=0
C:\postgresql\uninstall-postgresql.exe --mode unattended
:deleteFolder
If "%Count%"=="6" Goto :Failed
tasklist /V |%__AppDir_%findstr.exe /lic:"_uninstall" >nul 2> Nul && (Timeout /T 10 /Nobreak > Nul & <Nul Set /P "=." & Set /A "count+=1" & Goto :deleteFolder) || Goto :Post
:Post
if exist C:\postgresql (
RD /Q /S C:\postgresql && Echo/Task Completed
) Else Echo/C:\postgresql Absent
Goto :Eof
:Failed
Echo/Task failed to complete in the allocated time
Goto :Eof
不过,我建议您采用更稳健的方法来确定任务
使用时间戳和calculating time difference:
@echo off
setlocal EnableDelayedExpansion
C:\postgresql\uninstall-postgresql.exe --mode unattended
set "startTime=%time: =0%"
set "endTime="
:deleteFolder
tasklist /V |findstr /i "_uninstall*" >nul
if %errorlevel% == 0 (
goto waitAndDeleteFolder
) else (
goto cleanup
)
:waitAndDeleteFolder
timeout /T 10
set "endTime=%time: =0%"
set "end=!endTime:%time:~8,1%=%%100)*100+1!" & set "start=!startTime:%time:~8,1%=%%100)*100+1!"
set /A "elap=((((10!end:%time:~2,1%=%%100)*60+1!%%100)-((((10!start:%time:~2,1%=%%100)*60+1!%%100), elap-=(elap>>31)*24*60*60*100"
if !elap! gtr 6000 goto done
goto deleteFolder
:cleanup
if exist "C:\postgresql" RD /Q /S "C:\postgresql"
goto done
:done
如果满足特定条件,我正在尝试删除 Windows 服务器上的文件夹。如果不满足,则等待 10 秒并循环,再次检查条件。我还需要确保我不会永远处于循环中。 (检查我是否在循环中超过 60 秒,然后退出循环)。批处理文件看起来像这样:
C:\postgresql\uninstall-postgresql.exe --mode unattended
set TIMESTAMP1=%TIME%
:deleteFolder
tasklist /V |findstr /i "_uninstall*" >nul
if %errorlevel% == 0 (timeout /T /10 >nul
set TIMESTAMP2=%TIME%
**REM I want to make sure that we get out of this loop if the diff b/w TIMESTAMP2
AND TIMESTAMP1 IS MORE THEN 60 SECONDS**
goto deleteFolder
) ELSE (
if exists C:\postgresql RD /Q /S C:\postgresql)
Command 1
Command 2
Command 3
因此,我正在尝试从 windows 服务器卸载 Postgresql,通过检查任务列表确保卸载完成,然后删除 basedir (C:\postgresql)。如果卸载进程还是运行,那就等10秒再查看任务列表。我只是想确保我不会永远陷入循环。
提前致谢
更简单的方法是使用计数来打破循环
@Echo off & Set Count=0
C:\postgresql\uninstall-postgresql.exe --mode unattended
:deleteFolder
If "%Count%"=="6" Goto :Failed
tasklist /V |%__AppDir_%findstr.exe /lic:"_uninstall" >nul 2> Nul && (Timeout /T 10 /Nobreak > Nul & <Nul Set /P "=." & Set /A "count+=1" & Goto :deleteFolder) || Goto :Post
:Post
if exist C:\postgresql (
RD /Q /S C:\postgresql && Echo/Task Completed
) Else Echo/C:\postgresql Absent
Goto :Eof
:Failed
Echo/Task failed to complete in the allocated time
Goto :Eof
不过,我建议您采用更稳健的方法来确定任务
使用时间戳和calculating time difference:
@echo off
setlocal EnableDelayedExpansion
C:\postgresql\uninstall-postgresql.exe --mode unattended
set "startTime=%time: =0%"
set "endTime="
:deleteFolder
tasklist /V |findstr /i "_uninstall*" >nul
if %errorlevel% == 0 (
goto waitAndDeleteFolder
) else (
goto cleanup
)
:waitAndDeleteFolder
timeout /T 10
set "endTime=%time: =0%"
set "end=!endTime:%time:~8,1%=%%100)*100+1!" & set "start=!startTime:%time:~8,1%=%%100)*100+1!"
set /A "elap=((((10!end:%time:~2,1%=%%100)*60+1!%%100)-((((10!start:%time:~2,1%=%%100)*60+1!%%100), elap-=(elap>>31)*24*60*60*100"
if !elap! gtr 6000 goto done
goto deleteFolder
:cleanup
if exist "C:\postgresql" RD /Q /S "C:\postgresql"
goto done
:done