(view source code of atfuture.bat as plain text)
@ECHO OFF
SETLOCAL
:: Get command line arguments:: first argument -> fAmt = Amount of time in the future to schedual:: second argument -> fCmd = Command to be executed:: [third argument] -> fOpt = "none" as third option disables:: /INTERACTIVE on the job:: Set to TRUE for troubleshootingSET DEBUG=FALSE
:: Check command line argumentsIF "%2"=="" goto Usage
SET fAmt=%1
SET fCmd=%2
:: Check if specified time is within limitsIF %fAmt% GTR 60 GOTO Usage
IF %fAmt% LSS 2 GOTO Usage
::Default valueIF "%3"=="" (SET fOpt=/INTERACTIVE) ELSE (SET fOpt=%3)
IF /I "%fOpt:~0,1%"=="N" SET fOpt=
:: For troubleshooting purposesIF "%DEBUG%"=="TRUE" ECHO fAmt %fAmt% fCmd %fCmd% fOpt %fOpt%
:: Date and time functions for NT, independent of International settings:: Export registry settings to a temporary .REG fileSTART /W REGEDIT /E %TEMP%.\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
:: Read the exported data, filtering out keys added by Windows 2000FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "iDate"') DO SET iDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "sDate"') DO SET sDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "iTime" ^| FIND /I /V "iTimePrefix"') DO SET iTime=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "sTime" ^| FIND /I /V "sTimeFormat" ^| FIND /I /V "sTimePrefix"') DO SET sTime=%%B
:: Remove quotesSET iDate=%iDate:"=%
SET sDate=%sDate:"=%
SET iTime=%iTime:"=%
SET sTime=%sTime:"=%
:: Delete temporary .REG fileIF EXIST %TEMP%.\_TEMP.REG DEL %TEMP%.\_TEMP.REG
:: Parse current date, using International settings from the registryIF "%iDate%"=="0" FOR /F "TOKENS=1-4* DELIMS=%sDate% " %%A IN ('DATE/T') DO (
SET CYear=%%D
SET CMonth=%%B
SET CDay=%%C
SET SortDate=%%D%%B%%C
)IF "%iDate%"=="1" FOR /F "TOKENS=1-4* DELIMS=%sDate% " %%A IN ('DATE/T') DO (
SET CYear=%%D
SET CMonth=%%C
SET CDay=%%B
SET SortDate=%%D%%C%%B
)IF "%iDate%"=="2" FOR /F "TOKENS=1-4* DELIMS=%sDate% " %%A IN ('DATE/T') DO (
SET CYear=%%B
SET CMonth=%%C
SET CDay=%%D
SET SortDate=%%B%%C%%D
):: Remove leading zeroesSET /A CMonth = 1%CMonth% - 100
SET /A CDay = 1%CDay% - 100
:: Parse current time, using International settings from the registryFOR /F "TOKENS=1,2* DELIMS=%sTime% " %%A IN ('TIME/T') DO (
SET CHour=%%A
SET CMins=%%B
SET SortTime=%%A%%B
)IF "%iTime%"=="1" GOTO SkipAmPm
:: Process AM/PMSET AMPM=%CMins:~2,1%
SET CMins=%CMins:~0,2%
:: Remove leading zero from hours (only if necessary)IF "%CHour:~0,1%"=="0" IF NOT "%CHour%"=="0" SET /A CHour = 1%CHour% - 100
:: Convert from 12 hour AM/PM format to 24 hour formatIF %CHour% LSS 12 IF /I "%AMPM%"=="P" SET /A CHour = %CHour% + 12
IF %CHour% EQU 12 IF /I "%AMPM%"=="A" SET CHour=0
:SkipAmPm:: Remove leading zeroes (CMins always has 2 digits,:: with CHours we have to check if 1 or 2 digits are:: used, we may have removed the leading zero ourselves)SET /A CMins = 1%CMins% - 100
IF "%CHour:~0,1%"=="0" IF NOT "%CHour%"=="0" SET /A CHour = 1%CHour% - 100
:: Display Time Variables when troubleshootingIF /I "%DEBUG%"=="TRUE" SET C | FIND /I /V "COM"
IF /I "%DEBUG%"=="TRUE" SET SORT
::Temporary variable for deciding when to roll to next hourSET /A tMax = 59 - %fAmt%
IF %CMins% GTR %tMax% (CALL :RollHour) ELSE (SET /A CMins = %CMins% + %fAmt%)
:: Restore leading zeroesIF %CMins% LSS 10 SET CMins = 0%CMins%
IF %CHour% LSS 10 SET CHour = 0%CHour%
:: ** Here is the actual AT job setAT %CHour%:%CMins% %fOpt% cmd /c %fCmd%
:: DoneGOTO End
::**************************** SUB ROUTINES:RollHour:: CMins + fAmt is greater than 60. so we need to increment CHourSET /A CMins = %CMins% - 60 + %fAmt%
:: If its 23 hundred hours and we're going to add one:: hour we need to goto 00 but rather than using another goto:: we'll just set to -1 then increment by 1IF %CHour% EQU 23 SET CHour=-1
SET /A CHour = %CHour% + 1
GOTO:EOF
:UsageECHO.
ECHO ATFUTURE.BAT, Version 1.20 for Windows NT
ECHO Schedule a command a specified number of minutes in the near future
ECHO.
ECHO Usage: %~n0 minutes command [opt]
ECHO.
ECHO Where: minutes = number of minutes in future to schedule command ^(2-60^)
ECHO command = command to be executed ^(executed as CMD /C command^);
ECHO for long file names or extra command line parameters,
ECHO enclose the entire command in double quotes
ECHO opt = options for at:
ECHO None will set none
ECHO /INTERACTIVE by default
ECHO.
ECHO Written by Rob Fuller
ECHO rob_s_fuller@yahoo.com
ECHO and Rob van der Woude
ECHO http://www.robvanderwoude.com
GOTO End
:EndENDLOCAL
page last modified: 2025-10-11; loaded in 0.0063 seconds