Windows XP has a full featured command-line scheduler.
For Windows 2000, download ATT.zip, a super AT-like job scheduler, which includes periodicities such as first Monday, last Tuesday, last day of month, every three months, etc...
When you type att /?, you receive:
Version 0.41, Copyright (C)2001, Frank P. Westlake. Design assistance from Phil Robyn. Adds, deletes, displays, and enumerates Schedule service jobs. Add a job: ATT \[\\server\] \[+\]time \[/i\] \[/n|e|r:schedule\] "command" ATT \[\\server\] \[+\]time ON DateList \[/i\] \[/n|e|r:schedule\] DO "command" Delete a job: ATT \[\\server\] /d\[vy\] JobIdList | /DeleteAll Display a job: ATT \[\\server\] JobIdList Enumerate schedule: ATT \[\\server\] \[/bh\] \[/l \[JobIdList\]\] \[/c\[:twmfi\]j/#\] \[/o\[i|j|t\]\] \[/f\[TEPI\] /b Buffer the output. Press F1 for help when in the buffer. /c\[:list\] Selects the columns to print and the order to print them in. The switch alone will default to "Twmfij". 'list' may be stored in the environment variable %CMD:ATT%. t=Time(HH:MM:SS) w=Weekly schedule m=Monthly schedule T=Time(HH:MM:SS.ms) f=Flags i=ID j=Job /=Newline #=Tab /d Delete the specified range of jobs. /deleteAll Delete all jobs. Requires user verification or '/y'. /e: /n: Specifies the job schedule. Follow /e: or /n: with a comma delimited list of days for the job to run. /e indicates that the job should run on every instance of that day and /n indicates that it should run only on the next instance. For example: /n:M,Tu,W,Th,F,S,Su or /e:M-W,S,1-10,15,-0 or /n:M-1,T1,W-2,Th2 (last M, 1st T, 2nd to last W, and 2nd Th) /f List only jobs with one or more of the specified flags. /h No column headings with the enumerated schedule. /i The job should run interactively, not in the background. /l List the schedule. This is the default and the switch is only necessary if JobIdList is included. /o Sorts entries by the specified column. i=Id (default) j=Job t=Time /r: Repeat multiple units of Y, M, D, h, m, or s. Format: \[periodicity\]unit\[repetitions\] i.e.: /r:6D2 /r:6D /r:D2 /v Verify before deleting a job. /y Confirms that ALL jobs should be deleted (use with /DeleteAll). DateList A date or a range of dates. For example: 2001-11-12 or *-\[1,4,7,10\]-\[1,5-9,15,30\], where an '*' implies all. JobIdList A job or a list of jobs which may include ranges. For example: ATT 1,2-4,6,8-11,13 time A time of the form \[+\]HH:MM\[:SS\[.ms\]\] or \[+\]H:MM\[:SS\[.ms\]\]\[a|p\]m for absolute and relative times or +N\[h|m|s\] for relative times where 'N' is an integer and 's' is the default. The '+' indicates a relative time which will be added to the current time. - AT.EXE switches may also be used (/every, /next. /delete, /interactive). - When adding a job, the entire command line beyond the last recognized switch will be considered as part of the command to be scheduled. Special characters must either be escaped or the entire command string enclosed in quotes: ATT +5 /i /e:M ListJobs.cmd ^> file ATT +5 /i /e:M "ListJobs.cmd > file" Examples: ATT 00:00 ON *-01-01 DO HappyNewYear.cmd ATT +1m /r:m5 Ping 127.0.0.1