Ejecutar archivo por lotes cada X ejecuciones

Tengo un archivo por lotes que quiero ejecutar al apagar Windows (ejecutado a través de un script de apagado de GPO), pero solo quiero que se ejecute después de una cierta cantidad de apagados del sistema, no cada vez que se apaga. Esto se debe a que lo que hace provoca un retraso en el proceso de apagado y quiero reducir las interrupciones.

Lo único en lo que puedo pensar es en construir alguna lógica que verifique cuántas veces se apagó la computadora y después de cruzar el umbral definido, se ejecuta el archivo por lotes, pero ¿alguien tendría un ejemplo de cómo hacer esto? Busqué pero solo encontré ejemplos de cómo ejecutar un script cada x períodos o veces, no cada x ejecuciones.

Gracias de antemano!

preguntado el 28 de agosto de 12 a las 13:08

Use un contador almacenado en un archivo, luego léalo y actualícelo cada vez que se ejecute el archivo por lotes. -

2 Respuestas

@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...

Respondido 28 ago 12, 16:08

Gracias de nuevo, ¡lo revisaré e informaré! - dispersos

Puede llamar a su archivo por lotes en cada apagado e incluir lo siguiente en la parte superior para abortar si no se ha alcanzado el umbral de apagado.

@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

También podría usar una entrada de registro para realizar un seguimiento de la cantidad de apagados en lugar de un archivo.

Respondido 28 ago 12, 16:08

¡Eso se ve genial! Muchas gracias por la pronta y útil respuesta, muy apreciada :) Probaré lo antes posible e informaré;) - dispersos

Windows XP --> "usebackq" fue inesperado en este momento. - kbulgrien

OK, probé esto y creo que no entiendo lo que debe estar en el archivo shutdownCount.txt. Esto es lo que obtengo: C:\Users\Erez\Desktop>1.bat C:\Users\Erez\Desktop>setlocal C:\Users\Erez\Desktop>set /a "threshold=5, cnt=1 " C:\Users\Erez\Desktop>set shutdownCountFile="C:\Users\Erez\Desktop\shutdownCount.txt" "usebackq" fue inesperado en este momento. C:\Users\Erez\Desktop>para %F "usebackq" %A en ("C:\Users\Erez\Desktop\shutdownCount.txt") establezca /a cnt=%A+1 C:\Users\Erez \Escritorio> - dispersos

@ user1630260 - Vaya, tuve un error tipográfico. solía FOR %%F cuando quise escribir FOR /F. También apareció un mensaje de error no deseado. Todo arreglado ahora. - dbenham

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.