(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 troubleshooting
SET DEBUG=FALSE
:: Check command line arguments
IF "%2"=="" goto Usage
SET fAmt=%1
SET fCmd=%2
:: Check if specified time is within limits
IF %fAmt% GTR 60 GOTO Usage
IF %fAmt% LSS 2 GOTO Usage
::Default value
IF "%3"=="" (SET fOpt=/INTERACTIVE) ELSE (SET fOpt=%3)
IF /I "%fOpt:~0,1%"=="N" SET fOpt=
:: For troubleshooting purposes
IF "%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 file
START /W REGEDIT /E %TEMP%.\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
:: Read the exported data, filtering out keys added by Windows 2000
FOR /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 quotes
SET iDate=%iDate:"=%
SET sDate=%sDate:"=%
SET iTime=%iTime:"=%
SET sTime=%sTime:"=%
:: Delete temporary .REG file
IF EXIST %TEMP%.\_TEMP.REG DEL %TEMP%.\_TEMP.REG
:: Parse current date, using International settings from the registry
IF "%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 zeroes
SET /A CMonth = 1%CMonth% - 100
SET /A CDay = 1%CDay% - 100
:: Parse current time, using International settings from the registry
FOR /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/PM
SET 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 format
IF %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 troubleshooting
IF /I "%DEBUG%"=="TRUE" SET C | FIND /I /V "COM"
IF /I "%DEBUG%"=="TRUE" SET SORT
::Temporary variable for deciding when to roll to next hour
SET /A tMax = 59 - %fAmt%
IF %CMins% GTR %tMax% (CALL :RollHour) ELSE (SET /A CMins = %CMins% + %fAmt%)
:: Restore leading zeroes
IF %CMins% LSS 10 SET CMins = 0%CMins%
IF %CHour% LSS 10 SET CHour = 0%CHour%
:: ** Here is the actual AT job set
AT %CHour%:%CMins% %fOpt% cmd /c %fCmd%
:: Done
GOTO End
::**************************** SUB ROUTINES
:RollHour
:: CMins + fAmt is greater than 60. so we need to increment CHour
SET /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 1
IF %CHour% EQU 23 SET CHour=-1
SET /A CHour = %CHour% + 1
GOTO:EOF
:Usage
ECHO.
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
:End
ENDLOCAL
page last modified: 2024-04-16; loaded in 0.0203 seconds