![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-01 10:00 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已解决]检测U盘(重复运行) |
| 可打印版本 1,661 / 5 |
| 第1楼 Wingl83 | 发表于 2009-10-02 16:42 |
| 初级用户 发帖 65 积分 109 | |
|
[已解决]检测U盘(重复运行) 借鉴以前的帖子:说明:
查找是否存在U盘,若不存在,则直接重启;若存在,则删除所有的任务,等待U盘弹出后再重启。(每5秒检测一次) 测试时出现了问题: 我是在插入U盘的状态下运行的,可以正常运行,但是我拔出U盘后,它还是显示“还在复制呢!!”这样的信息,并不能重启,我想知道就上面的代码,我犯了什么错误? [ Last edited by Wingl83 on 2009-10-4 at 19:37 ] |
|
| 第2楼 mountvol | 发表于 2009-10-04 00:04 |
| 初级用户 发帖 117 积分 186 | |
|
:wait
set "p=" 其他的没看,就看到了这明显的一处。 |
|
| 第3楼 Wingl83 | 发表于 2009-10-04 09:48 |
| 初级用户 发帖 65 积分 109 | |
|
没有错啦,我在Wait前做了延时,所以不用手动操作。
|
|
| 第4楼 wxcute | 发表于 2009-10-04 10:05 |
| 中级用户 发帖 211 积分 458 | |
|
2 楼的意思是要清空变量。
|
|
| 第5楼 Wingl83 | 发表于 2009-10-04 10:36 |
| 初级用户 发帖 65 积分 109 | |
|
可以了,谢谢。
请问为什么一定要清空呢?都是检测出U盘的盘符啊?! |
|
| 第6楼 Hanyeguxing | 发表于 2009-10-04 11:57 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
当没有移动磁盘时,set p=%%a不会被运行,这时p的值为上次所赋值。
所以,当移动磁盘被拔出时,p依然是有移动磁盘时的值,并因为goto而一直保持下去。这样,if "%p%"=="" 就一直不被执行。 给你举个简单的例子: 显示2。 但如果把echo hanyeguxing>test.txt改成echo. >test.txt,因为test.txt为空,所以for /f %%i in (test.txt) do 无法获取解析结果,即set a=2不被执行,这个时候a因为set a=1而保持1这个值。 回头看你写的批处理: 假如没有移动磁盘,第一个for解析但不赋值,所以p没有值,即为空,在if处跳转。 假如有移动磁盘,第一个for解析并赋值,if 因p不为空而不执行,第2个for执行时,此时无论有无移动硬盘,p都有值,if无法执行goto跳转。 还有一个问题,这个批处理中,没有必要使用&goto :eof。 另外一个问题,因为echo.还在复制呢!!在标签内部,所以将可能被循环,出于美观,最好只输出一次。 最后一个问题,for使用了2次,多余,可以把at /delete /yes加到wait标签里或外。如果不想要输出结果,可以屏蔽输出。 如果因为某些原因,at命令需要在标签内部,且要求只执行一次,可以这样写: [ Last edited by Hanyeguxing on 2009-10-4 at 13:00 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |