2012-08-28 34 views
2

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

我可以考虑的唯一的事情是构建一些逻辑来检查计算机关闭了多少次,并且在超过定义的阈值后批处理文件被执行,但是谁会有一个例子来说明如何做到这一点?我搜索,但只发现如何运行一个脚本每x个周期或时间,而不是每个x运行的例子。

在此先感谢!

+0

使用存储在文件中的计数器,然后在每次运行批处理文件时读取并更新它。 – Jay

回答

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... 
+0

再次感谢 - 将检查并回报! – scatterbits

+0

非常感谢你的创作! – scatterbits

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 

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

+0

这看起来不错!非常感谢您的回复 - 非常感谢:)将尽快测试并报告;) – scatterbits

+0

Windows XP - >“usebackq”此时出乎意料。 – kbulgrien

+0

好的,我测试了这个,我想我不明白什么需要在shutdownCount.txt文件中?这就是我得到: C:\用户\埃雷兹\桌面> 1.BAT C:\用户\埃雷兹\桌面> SETLOCAL C:\用户\埃雷兹\桌面>设置/“门槛= 5,cnt = 1“ C:\ Users \ Erez \ Desktop> set shutdownCountFile =”C:\ Users \ Erez \ Desktop \ shutdownCount.txt“ ”usebackq“此时意外。 (“C:\ Users \ Erez \ Desktop \ shutdownCount.txt”)中的%F“usebackq”%A的C:\ Users \ Erez \ Desktop> do set/a cnt =%A + 1 C: \ Users \ Erez \ Desktop> – scatterbits