![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 14:51 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]从某个文件中提取文件名并执行相应操作的批处理 |
| 可打印版本 2,300 / 16 |
| 第1楼 wjgyz740526 | 发表于 2007-08-20 20:50 |
| 中级用户 发帖 44 积分 203 | |
|
[求助]从某个文件中提取文件名并执行相应操作的批处理 我想做一个从一个文件中提取特定文件名并执行相应操作的批处理,比如d盘根目录下的0.txt的内容为:
【asdasdas】 sdf44 open=000.exe ... 现在我想通过批处理提取出0.txt文件中“=”号后面的000.exe并执行相应操作比如删除,我的代码如下: @echo off for /f "delims=" %%p in ('findstr /i "open=" d:\0.txt') do ( set aa=%%p set b=%aa:~5,20% echo %b% ) pause 可是执行后却没有预期的效果,请问我的代码哪错了? [ Last edited by wjgyz740526 on 2007-8-20 at 11:04 PM ] |
|
| 第2楼 Climbing | 发表于 2007-08-21 08:14 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你这样做肯定通用性不好,而且for的用法不对。改成这样试试:
@echo off for /f "usebackq delims=" %%p in (`findstr /i "open=" d:\0.txt`) do ( set %%p echo %open% ) pause |
|
| 第3楼 wjgyz740526 | 发表于 2007-08-21 10:41 |
| 中级用户 发帖 44 积分 203 | |
|
老大你的cmd无效啊
而且能解释下吗?usebackq delims=什么意思? |
|
| 第4楼 Climbing | 发表于 2007-08-21 11:36 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
确实有点儿问题,改成这样:
|
|
| 第5楼 wjgyz740526 | 发表于 2007-08-21 15:46 |
| 中级用户 发帖 44 积分 203 | |
|
我的初衷是自动查找所有分区根目录下是否有autoron.inf(以及文件名包含autorun.inf的文件比如-autorun.inf),有的话删除该文件并且也删除这个文件中open=后指定的可执行文件。
我的代码: @echo off for %%a in (c d e f g h) do ( for /f %%i in ('dir /b /a-h %%a:\ ^|findstr /i "autorun.inf"') do ( for /f %%p in ('findstr /i "open=" %%a:\%%i') do ( set file=%%p set nn=%file:~5% echo %nn% echo 在%%a盘下发现%%i和"%nn%"病毒!! del /p /f /a-h %%a:\%%i del /p /f /a-h %%a:\%nn% ) ) ) pause 能找到autorun.inf文件但是奇怪的是它会把根目录下的所有文件都删除!那儿错了呢? 改成你的也这样: @echo off for %%a in (c d e f g h) do ( for /f %%i in ('dir /b /a-h %%a:\ ^|findstr /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-h %%a:\%%i del /p /f /a-h %%a:\%nn% ) ) ) pause |
|
| 第6楼 wjgyz740526 | 发表于 2007-08-21 15:55 |
| 中级用户 发帖 44 积分 203 | |
|
坛子里有一个autorun.inf病毒免疫程序,我看了下它不是根据autorun.inf中指定的可执行文件来删除
|
|
| 第7楼 Climbing | 发表于 2007-08-21 15:57 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你的批处理肯定是有问题的。而我的批处理并没有问题。
三个for循环嵌套的批处理我并没有写过,而且这东西很不好测试。总之,你的批处理写的有问题,自己最好再好好调试一下。你对for命令的用法并不十分掌握,再好好研究一下吧。 |
|
| 第8楼 Climbing | 发表于 2007-08-21 16:05 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
下面是我写的批处理,我测试了一下,基本上正常。
另外,del /p /f /a %%a:\!open!这条命令恐怕是有问题的,因为!open!有可能包括了盘符。 |
|
| 第9楼 wjgyz740526 | 发表于 2007-08-21 16:20 |
| 中级用户 发帖 44 积分 203 | |
|
我看了下,你的代码比我的只是多了"usebackq delims=" 这一段,请问这段怎么解释呢?for /?看不明白
你说的!open!有可能包括了盘符什么意思?这就是误删的原因吗?该怎么解决呢? |
|
| 第10楼 superadam | 发表于 2007-08-21 16:23 |
| 初级用户 发帖 51 积分 113 | |
|
樓主的這個問題偶也問過Climbing大哥﹐幫你轉一下Climbing的回帖。
以下是Climbing的回帖 usebackq我是这样理解的:使用反引号(`)括起将来执行的命令序列,正常情况下是使用单引号(')来括起命令,但有时候命令参数中需要用到单引号或者双引号(这时就会造成单双引号的混乱),这时候最好就是使用usebackq参数,然后使用反引号来括起命令,就不会产生这种困扰了。 |
|
| 第11楼 wjgyz740526 | 发表于 2007-08-21 16:23 |
| 中级用户 发帖 44 积分 203 | |
|
如果!open!有可能包括盘符,那么我先用set把变量转移下是不是就可以了呢?
|
|
| 第12楼 Climbing | 发表于 2007-08-21 16:23 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗?
区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。 |
|
| 第13楼 superadam | 发表于 2007-08-21 16:25 |
| 初级用户 发帖 51 积分 113 | |
Originally posted by Climbing at 2007-8-21 04:23 PM: 呵呵﹐我已試過是可以用的。 [ Last edited by superadam on 2007-8-21 at 04:33 PM ] 附件 未命名.jpg (38.93 KiB) |
|
| 第14楼 Climbing | 发表于 2007-08-21 16:30 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
实际上我这里根本找不到autorun.inf这一类的病毒,所以,我测试批处理都是用我自己造的试验数据,所以,到底是不是符合实际情况,我并不敢保证,所以我说那条删除!open!的命令有可能有问题。只要了解了原理,解决也并不复杂,在删除!open!之前先检测一下是否有盘符,如果有就不加盘符就可以了,这个并不复杂。
|
|
| 第15楼 superadam | 发表于 2007-08-21 16:38 |
| 初级用户 发帖 51 积分 113 | |
Originally posted by Climbing at 2007-8-21 04:30 PM: 請教Climbing大哥﹕ 如上圖所示﹕ 這里面有個FINDSTR﹕無法開啟D:是怎么回事? [ Last edited by superadam on 2007-8-21 at 04:40 PM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |