![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 18:21 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 碰到个for和管道命令组合的诡异问题(原因找到,机理未名) |
| 可打印版本 2,123 / 16 |
| 第1楼 picat | 发表于 2007-08-24 17:31 |
| 初级用户 发帖 68 积分 150 | |
|
碰到个for和管道命令组合的诡异问题(原因找到,机理未名) 建了一个脚本,名为JobTime.vbs,代码如下:
作用是生成当前整点时间往后的2个时间点,步长为30分钟。 然后用P处理生成2个时间点的任务计划,并且检查是否成功,代码如下: 前面没有任何问题,问题就在检查成功与否的这一个for循环中,运行到这一步就提示: 但是我把echo off 改成 echo on,发现它生成的命令都是正确的,比如: 我把它们复制(AT |find /I "C:\job.bat" |find "星期五" |find "18:00" )下来单独运行也没有问题, 如: 能够正确的找到,百思不得其解。 把AT换成dir命令(比如dir ^|find "C:\test.bat"),倒是可以运行,但是得到的结果格式和预期的也不一样。预期的结果应该是符合find条件的一行,但实际运行下来的结果是这样的: 这个是不是又跟dos的某个机制有关的?希望大家给点意见,谢谢! [ Last edited by picat on 2007-8-24 at 10:14 PM ] |
|
| 第2楼 picat | 发表于 2007-08-24 18:03 |
| 初级用户 发帖 68 积分 150 | |
|
补充一下,我的环境是windows XP SP2 Proffessional中文版,cmd模式
然后我换了个方法,把检查的语句顺序换了一下: 诡异的事情又来了,得到的结果居然是这样的: 命令都对,也都执行了,但是出来的结果却是把生成的2个时间的任务都找出来了,似乎|find没有起到作用...... [ Last edited by picat on 2007-8-24 at 06:05 PM ] |
|
| 第3楼 slore | 发表于 2007-08-24 18:30 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@echo off
c: cd\ for /f "tokens=1,2 delims=," %%i in ('cscript //nologo JobTime.vbs') do ( AT %%j /every:%%i "c:\job.bat" AT |find /I "C:\job.bat" |find "%%i" |find "%%j" ) pause 你看看? 你的VBS有问题哦~如果现在是23点,你设置数量是2个点得到的第2个 0:00你看是星期几? |
|
| 第4楼 picat | 发表于 2007-08-24 21:23 |
| 初级用户 发帖 68 积分 150 | |
|
slore你说的对,我改了一下:
不过这个貌似下标越界的代码居然可以正常运行...,今天尽碰到怪事了。 |
|
| 第5楼 picat | 发表于 2007-08-24 21:28 |
| 初级用户 发帖 68 积分 150 | |
|
还有你上面的P代码我也测试过了,还是同样的问题:
无效的命令。 AT 命令安排在特定日期和时间运行命令和程序。 要使用 AT 命令,计划服务必须已在运行中。 以下省略...... |
|
| 第6楼 slore | 发表于 2007-08-24 21:29 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
哪里下标越界了?
|
|
| 第7楼 picat | 发表于 2007-08-24 21:34 |
| 初级用户 发帖 68 积分 150 | |
Originally posted by slore at 2007-8-24 21:29: 在这儿: For n = 1 To intCount --假设intcount=16 我前面 ReDim strTime(intCount) ReDim strWeekDay(intCount) ReDim strDaySerial(intCount) 那么下标应该是从0-15吧,可我WScript.Echo strWeekday(n) & "," & strTime(n)这个n从1-16 ![]() ![]() [ Last edited by picat on 2007-8-24 at 09:55 PM ] |
|
| 第8楼 slore | 发表于 2007-08-24 21:36 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
intcount=16
数组里写16不是个数,是上界……没有使用To,下界用默认的0开始…… 所以是0到16 1-16属于0-16的范围…… |
|
| 第9楼 slore | 发表于 2007-08-24 21:38 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
=。=说到VB去了……VBS里没有To……只能从0开始……
|
|
| 第10楼 picat | 发表于 2007-08-24 21:41 |
| 初级用户 发帖 68 积分 150 | |
Originally posted by slore at 2007-8-24 21:36: 晕了,一直以为dim里的数字是个数...,好像是跟以前学的哪个语言搞混了... |
|
| 第11楼 picat | 发表于 2007-08-24 21:44 |
| 初级用户 发帖 68 积分 150 | |
|
slore,你觉得上面的P代码,可能的问题在哪里啊?感觉上跟|find有关,但又只在说不出问题在哪里.......
|
|
| 第12楼 slore | 发表于 2007-08-24 21:54 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
P我已经给你改过了啊……你运行我写的代码看看啊
|
|
| 第13楼 picat | 发表于 2007-08-24 21:59 |
| 初级用户 发帖 68 积分 150 | |
|
不好意思,刚才运行确实可以了,之前一次不知道哪里搞错了。但我觉得你的P代码跟我的没有实质性的区别啊,能告诉我什么原因吗?
|
|
| 第14楼 picat | 发表于 2007-08-24 22:06 |
| 初级用户 发帖 68 积分 150 | |
|
发现了,问题在转义字符^上,我把原先的P代码改成:
去掉里面的^就可以正常运行了...... 但是P代码里用到管道|不是需要^来转义的?.......晕死。这应该又是DOS的某个特殊点......,而且有^和没有^生成的命令都是一样的(至少看起来一样),但一个正常运行一个就不行....... [ Last edited by picat on 2007-8-24 at 10:08 PM ] |
|
| 第15楼 slore | 发表于 2007-08-24 22:25 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你是要当字符串麽?转义?
你是要执行呀……转义干什么 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |