联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@echo off & setlocal ENABLEDELAYEDEXPANSION set open= for /f "usebackq delims=" %%p in (`findstr /i "open=" d:\0.txt`) do ( set %%p echo !open! & pause ) endlocal
@echo off & setlocal ENABLEDELAYEDEXPANSION for %%a in (c d e f g h i j k l m n) do ( for /f "usebackq delims=" %%i in (`dir /b /a-d %%a:\ ^| find /i "autorun.inf"`) do ( set open= for /f "usebackq delims=" %%p in (`findstr /i "open=" %%a:\%%i`) do ( set %%p echo 在%%a盘下发现%%i和!open!病毒!! del /p /f /a %%a:\%%i del /p /f /a %%a:\!open! ) ) ) pause endlocal
usebackq我是这样理解的:使用反引号(`)括起将来执行的命令序列,正常情况下是使用单引号(')来括起命令,但有时候命令参数中需要用到单引号或者双引号(这时就会造成单双引号的混乱),这时候最好就是使用usebackq参数,然后使用反引号来括起命令,就不会产生这种困扰了。 至于“delims=”参数,则是用来指定字符串分隔符的,for /f命令主来用来提取一个字符串中的字段,既然有字段的区分,就要有分隔字段的符号,默认是空格或者Tab,你可以使用delims=来指定你自己要使用的分隔符,而在本例中,你当然不希望使用任何分隔符,所以指定delims=空。 这个,看微软的for /?就可以查到了,尽管它的解释让人感觉很晕,但时间长了自然就明白了。
Originally posted by Climbing at 2007-8-21 04:23 PM: 你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗? 区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。
附件 1: 未命名.jpg (2007-8-21 16:32, 38.93 K,下载次数: 1)
Originally posted by Climbing at 2007-8-21 04:30 PM: 实际上我这里根本找不到autorun.inf这一类的病毒,所以,我测试批处理都是用我自己造的试验数据,所以,到底是不是符合实际情况,我并不敢保证, ...