建了一个脚本,名为JobTime.vbs,代码如下:
Option Explicit
Dim n
Dim intCount
intCount = 2
ReDim strTime(intCount)
ReDim strWeekDay(intCount)
ReDim strDaySerial(intCount)
strTime(0) = FormatDateTime(TimeValue(TimeSerial(Hour(Now),30,0)),vbShortTime)
strWeekDay(0) = WeekdayName(Weekday(Now))
strDaySerial(0) = Now
For n = 0 To intCount-1
strTime(n+1)=Timevalue(strTime(n))+ TimeSerial(0,30,0)
strTime(n+1)= FormatDateTime(strTime(n+1),vbShortTime)
strDaySerial(n+1) = strDaySerial(n) + TimeSerial(0,30,0)
strWeekDay(n+1) = WeekdayName(Weekday(strDaySerial(n+1)))
WScript.Echo strWeekday(n) & "," & strTime(n)
next
作用是生成当前整点时间往后的2个时间点,步长为30分钟。
然后用P处理生成2个时间点的任务计划,并且检查是否成功,代码如下:
@echo off
c:
cd\
for /f "tokens=1,2 delims=," %%i in ('cscript //nologo JobTime.vbs') do (AT %%j /every:%%i "c:\job.bat")
@rem 检查成功与否
for /f "tokens=1,2 delims=," %%i in ('cscript //nologo JobTime.vbs') do (
AT ^|find /I "C:\job.bat" ^|find "%%i" ^|find "%%j"
)
pause
前面没有任何问题,问题就在检查成功与否的这一个for循环中,运行到这一步就提示:
无效的命令。
AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。
AT | /DELETE ]
AT time
| /NEXT:date] "command"
以下省略......
但是我把echo off 改成 echo on,发现它生成的命令都是正确的,比如:
C:\>(AT |find /I "C:\job.bat" |find "星期五" |find "18:00" )
无效的命令。
AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。
以下省略......
我把它们复制(AT |find /I "C:\job.bat" |find "星期五" |find "18:00" )下来单独运行也没有问题,
如:
C:\>(AT |find /I "C:\job.bat" |find "星期五" |find "18:00" )
18 每月执行日期: 星期五 下午 18:00 c:\job.bat
能够正确的找到,百思不得其解。
把AT换成dir命令(比如dir ^|find "C:\test.bat"),倒是可以运行,但是得到的结果格式和预期的也不一样。预期的结果应该是符合find条件的一行,但实际运行下来的结果是这样的:
C:\>for /F "tokens=1,2 delims=," %i in ('cscript //nologo JobTime.vbs') do (dir
|find "C:\test.bat" )
C:\>(dir |find "C:\test.bat" )
驱动器 C 中的卷是 SYSTEM
卷的序列号是 8072-864F
C:\ 的目录
C:\ 的目录
2007-08-24 17:27 296 test.bat
1 个文件 296 字节
0 个目录 10,650,035,200 可用字节
这个是不是又跟dos的某个机制有关的?希望大家给点意见,谢谢!
Last edited by picat on 2007-8-24 at 10:14 PM ]