每X次运行执行批处理文件

时间:2012-08-28 12:38:45

标签: batch-file

我有一个批处理文件,我想在Windows关机时运行(通过GPO关机脚本执行),但我只希望它在一定数量的系统关闭后运行,而不是每次关机时运行。这是因为它的作用导致关机过程延迟,我想减少中断。

我唯一能想到的是构建一些逻辑来检查计算机关闭的次数,并且在超过定义的阈值之后执行批处理文件,但是有人会举例说明如何执行此操作吗?我搜索过但只找到了如何每隔x个时间段运行一个脚本的示例,而不是每个x次运行。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以在每次关机时调用批处理文件,如果未达到关闭阈值,则在顶部包含以下内容以中止。

@echo off

::Test if the shutdown threshold has been met. Exit if it hasn't
setlocal
set /a "threshold=5, cnt=1"
set shutdownCountFile="C:\SomePath\shutdownCount.txt"
if exist %shutdownCountFile% for /f "usebackq" %%A in (%shutdownCountFile%) do set /a cnt=%%A+1
if %cnt% geq %threshold% (
  2>nul del %shutdownCountFile%
  endlocal
) else (
  >%shutdownCountFile% echo %cnt%
  exit /b
)

:: Your batch process goes here

您还可以使用注册表项来跟踪关闭数量而不是文件。

答案 1 :(得分:1)

@ECHO OFF
SET LIMIT=4
SET SAVEFILE="COUNT.TXT"
SETLOCAL ENABLEDELAYEDEXPANSION

REM Get the current count or start a new file if it does not exist.
IF EXIST %SAVEFILE% GOTO READFILE
ECHO 0 >%SAVEFILE%
:READFILE
SET /P COUNT= <%SAVEFILE%

REM Increment the save file value by one.
FOR %%B IN ( "%SAVEFILE%" ) DO (
  CALL :ADD_ONE
)
ECHO %COUNT% >%SAVEFILE%
GOTO CHECK_VALUE
:ADD_ONE
SET /A COUNT+=1
GOTO :EOF

REM Conditionally reset the counter and do something.
:CHECK_VALUE
IF %COUNT% LSS %LIMIT% EXIT /B
DEL %SAVEFILE% 2>NUL

ECHO Do your stuff here...