中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]从某个文件中提取文件名并执行相应操作的批处理
« [1] [2] »
作者:
标题: [求助]从某个文件中提取文件名并执行相应操作的批处理 上一主题 | 下一主题
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『楼 主』:  [求助]从某个文件中提取文件名并执行相应操作的批处理

我想做一个从一个文件中提取特定文件名并执行相应操作的批处理,比如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 ]

2007-8-20 20:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

你这样做肯定通用性不好,而且for的用法不对。改成这样试试:

@echo off
for /f "usebackq delims=" %%p in (`findstr /i "open=" d:\0.txt`) do (
      set %%p
      echo %open%
)
pause



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 08:14
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『第 3 楼』:  

老大你的cmd无效啊

而且能解释下吗?usebackq delims=什么意思?

2007-8-21 10:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

确实有点儿问题,改成这样:
@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




偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 11:36
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『第 5 楼』:  

我的初衷是自动查找所有分区根目录下是否有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

2007-8-21 15:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『第 6 楼』:  

坛子里有一个autorun.inf病毒免疫程序,我看了下它不是根据autorun.inf中指定的可执行文件来删除

2007-8-21 15:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 7 楼』:  

你的批处理肯定是有问题的。而我的批处理并没有问题。

三个for循环嵌套的批处理我并没有写过,而且这东西很不好测试。总之,你的批处理写的有问题,自己最好再好好调试一下。你对for命令的用法并不十分掌握,再好好研究一下吧。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 15:57
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 8 楼』:  

下面是我写的批处理,我测试了一下,基本上正常。
@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!有可能包括了盘符。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 16:05
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『第 9 楼』:  

我看了下,你的代码比我的只是多了"usebackq delims=" 这一段,请问这段怎么解释呢?for /?看不明白

你说的!open!有可能包括了盘符什么意思?这就是误删的原因吗?该怎么解决呢?

2007-8-21 16:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
superadam
初级用户





积分 113
发帖 51
注册 2007-2-15
状态 离线
『第 10 楼』:  

樓主的這個問題偶也問過Climbing大哥﹐幫你轉一下Climbing的回帖。
以下是Climbing的回帖

  Quote:
usebackq我是这样理解的:使用反引号(`)括起将来执行的命令序列,正常情况下是使用单引号(')来括起命令,但有时候命令参数中需要用到单引号或者双引号(这时就会造成单双引号的混乱),这时候最好就是使用usebackq参数,然后使用反引号来括起命令,就不会产生这种困扰了。

至于“delims=”参数,则是用来指定字符串分隔符的,for /f命令主来用来提取一个字符串中的字段,既然有字段的区分,就要有分隔字段的符号,默认是空格或者Tab,你可以使用delims=来指定你自己要使用的分隔符,而在本例中,你当然不希望使用任何分隔符,所以指定delims=空。

这个,看微软的for /?就可以查到了,尽管它的解释让人感觉很晕,但时间长了自然就明白了。



2007-8-21 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjgyz740526
中级用户




积分 203
发帖 44
注册 2003-8-14
状态 离线
『第 11 楼』:  

如果!open!有可能包括盘符,那么我先用set把变量转移下是不是就可以了呢?

2007-8-21 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 12 楼』:  

你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗?

区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 16:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
superadam
初级用户





积分 113
发帖 51
注册 2007-2-15
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by Climbing at 2007-8-21 04:23 PM:
你看别人的批处理并不仔细,我的批处理跟你的仅仅有那么一点儿区别吗?

区别大了去了,所以我说你对for命令的用法并不是十分掌握。你运行一下我的批处理,看看效果再说。

呵呵﹐我已試過是可以用的。

[ Last edited by superadam on 2007-8-21 at 04:33 PM ]

附件 1: 未命名.jpg (2007-8-21 16:32, 38.93 K,下载次数: 1)


2007-8-21 16:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 14 楼』:  

实际上我这里根本找不到autorun.inf这一类的病毒,所以,我测试批处理都是用我自己造的试验数据,所以,到底是不是符合实际情况,我并不敢保证,所以我说那条删除!open!的命令有可能有问题。只要了解了原理,解决也并不复杂,在删除!open!之前先检测一下是否有盘符,如果有就不加盘符就可以了,这个并不复杂。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-8-21 16:30
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
superadam
初级用户





积分 113
发帖 51
注册 2007-2-15
状态 离线
『第 15 楼』:  



  Quote:
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 ]

2007-8-21 16:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: