楼 主
[求助]从某个文件中提取文件名并执行相应操作的批处理
发表于 2007-08-20 20:50 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
我想做一个从一个文件中提取特定文件名并执行相应操作的批处理,比如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 楼
发表于 2007-08-21 08:14 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
你这样做肯定通用性不好,而且for的用法不对。改成这样试试:
@echo off
for /f "usebackq delims=" %%p in (`findstr /i "open=" d:\0.txt`) do (
set %%p
echo %open%
)
pause
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 3 楼
发表于 2007-08-21 10:41 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
老大你的cmd无效啊
而且能解释下吗?usebackq delims=什么意思?
第 4 楼
发表于 2007-08-21 11:36 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
确实有点儿问题,改成这样:
@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
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 5 楼
发表于 2007-08-21 15:46 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
我的初衷是自动查找所有分区根目录下是否有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 楼
发表于 2007-08-21 15:55 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
坛子里有一个autorun.inf病毒免疫程序,我看了下它不是根据autorun.inf中指定的可执行文件来删除
第 7 楼
发表于 2007-08-21 15:57 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
你的批处理肯定是有问题的。而我的批处理并没有问题。
三个for循环嵌套的批处理我并没有写过,而且这东西很不好测试。总之,你的批处理写的有问题,自己最好再好好调试一下。你对for命令的用法并不十分掌握,再好好研究一下吧。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 8 楼
发表于 2007-08-21 16:05 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
下面是我写的批处理,我测试了一下,基本上正常。
@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
另外,del /p /f /a %%a:\!open!这条命令恐怕是有问题的,因为!open!有可能包括了盘符。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 9 楼
发表于 2007-08-21 16:20 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
我看了下,你的代码比我的只是多了"usebackq delims=" 这一段,请问这段怎么解释呢?for /?看不明白
你说的!open!有可能包括了盘符什么意思?这就是误删的原因吗?该怎么解决呢?
第 10 楼
发表于 2007-08-21 16:23 · IANA 局域网IP(Private-Use)
初级用户
★★
积分 113 发帖 51 注册 2007-02-15 22:54 19年会员 UID 79590 性别 男
状态 离线
樓主的這個問題偶也問過Climbing大哥﹐幫你轉一下Climbing的回帖。
以下是Climbing的回帖
usebackq我是这样理解的:使用反引号(`)括起将来执行的命令序列,正常情况下是使用单引号(')来括起命令,但有时候命令参数中需要用到单引号或者双引号(这时就会造成单双引号的混乱),这时候最好就是使用usebackq参数,然后使用反引号来括起命令,就不会产生这种困扰了。
至于“delims=”参数,则是用来指定字符串分隔符的,for /f命令主来用来提取一个字符串中的字段,既然有字段的区分,就要有分隔字段的符号,默认是空格或者Tab,你可以使用delims=来指定你自己要使用的分隔符,而在本例中,你当然不希望使用任何分隔符,所以指定delims=空。
这个,看微软的for /?就可以查到了,尽管它的解释让人感觉很晕,但时间长了自然就明白了。
第 11 楼
发表于 2007-08-21 16:23 · 中国 江苏 扬州 电信
中级用户
★
积分 203 发帖 44 注册 2003-08-14 00:00 22年会员 UID 8600 性别 男
状态 离线
如果!open!有可能包括盘符,那么我先用set把变量转移下是不是就可以了呢?
第 12 楼
发表于 2007-08-21 16:23 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗?
区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 13 楼
发表于 2007-08-21 16:25 · IANA 局域网IP(Private-Use)
初级用户
★★
积分 113 发帖 51 注册 2007-02-15 22:54 19年会员 UID 79590 性别 男
状态 离线
Originally posted by Climbing at 2007-8-21 04:23 PM:
你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗?
区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。
呵呵﹐我已試過是可以用的。
[
Last edited by superadam on 2007-8-21 at 04:33 PM ]
第 14 楼
发表于 2007-08-21 16:30 · 中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
实际上我这里根本找不到autorun.inf这一类的病毒,所以,我测试批处理都是用我自己造的试验数据,所以,到底是不是符合实际情况,我并不敢保证,所以我说那条删除!open!的命令有可能有问题。只要了解了原理,解决也并不复杂,在删除!open!之前先检测一下是否有盘符,如果有就不加盘符就可以了,这个并不复杂。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 15 楼
发表于 2007-08-21 16:38 · IANA 局域网IP(Private-Use)
初级用户
★★
积分 113 发帖 51 注册 2007-02-15 22:54 19年会员 UID 79590 性别 男
状态 离线
Originally posted by Climbing at 2007-8-21 04:30 PM:
实际上我这里根本找不到autorun.inf这一类的病毒,所以,我测试批处理都是用我自己造的试验数据,所以,到底是不是符合实际情况,我并不敢保证, ...
請教Climbing大哥﹕
如上圖所示﹕
這里面有個
FINDSTR﹕無法開啟D: 是怎么回事?
[
Last edited by superadam on 2007-8-21 at 04:40 PM ]
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正