中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]请问如何批量删除文件中指定的文件?
« [1] [2] »
作者:
标题: [求助]请问如何批量删除文件中指定的文件? 上一主题 | 下一主题
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『楼 主』:  [求助]请问如何批量删除文件中指定的文件?

通过一软件检查出文件中有些文件是坏的,然后生成一个检查报告:
D:\1\
000010.pdg, 000087.pdg, 000092.pdg-000093.pdg, 000095.pdg-000097.pdg, 000102.pdg, 000105.pdg-000108.pdg, 000117.pdg

第一行是这些文件所放的路径
第二三行是坏的文件名,用逗号隔开,另外还有个特点就是有些文件连续是坏的,所以表示为000105.pdg-000114.pdg,即000105.pdg,000106.pdg,000107.pdg,000108.pdg都是坏的
现在我想把这个检查报告中所有列出的文件删掉,用批处理如何实现。谢谢!

2008-3-25 19:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

del d:\1\*.pdg  /f /q

2008-3-25 20:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 3 楼』:  

不好意思,忘了说了,这个文件夹中还有别的pdg文件,如果用这个命令其它文件会被删掉,我只想把检查报告中显示的坏文件删掉。

2008-3-25 20:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xysoft
新手上路





积分 4
发帖 2
注册 2008-3-25
状态 离线
『第 4 楼』:  

晕了,你这一共才几个文件啊,手动都能删没了

2008-3-25 21:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by xysoft at 2008-3-25 09:05 PM:
晕了,你这一共才几个文件啊,手动都能删没了

为了表明我想问的问题,没有全粘贴出来而已,另外,一次手动删除还可以接受,但如果再下载下来的再检查还得删,按报告中的文件名找到指定的文件然后再删掉,这样手动删几十个文件,很繁琐的。

2008-3-25 21:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 6 楼』:  

看你检测软件输出文本的格式吧- - 不知道格式怎么搞?

2008-3-25 21:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 7 楼』:  


@echo off
set "str=000010.pdg, 000087.pdg, 000092.pdg-000093.pdg, 000095.pdg-000097.pdg, 000102.pdg, 000105.pdg-000108.pdg, 000117.pdg"
for %%i in (%str%) do (
    set fn=%%i
    call set fn1=%%fn:~0,10%%
    call set fn2=%%fn:~-10%%
    call :dl
)
pause
goto :eof

:dl
for %%a in (*.pdg) do if %%a geq %fn1% if %%a leq %fn2% echo %%a
想不出什么好方法,效率偏低

2008-3-25 21:57
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by abcd at 2008-3-25 09:57 PM:
[code]@echo off
set "str=000010.pdg, 000087.pdg, 000092.pdg-000093.pdg, 000095.pdg-000097.pdg, 000102.pdg, 000105.pdg-000108.pdg, 000117.pdg"
for %%i in (%str%) do (
    set fn=%%i
   ...

我把它做成bat文件放到那个目录里,运行后,没有效果。

2008-3-25 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 9 楼』:  

这个怎么样
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do set ph=%%a&goto lop
:lop
for /f "skip=1 delims=" %%i in (a.txt) do (
        set src=%%i
        set src=!src:,= !
        for %%a in (!src!) do call :loop %%a
     )
pause
goto :eof
:loop
for /f "tokens=1,2 delims=-" %%a in ("%1") do (
       echo %ph%%%a
       if not "%%b"=="" call :loop1 %%a %%b
       )
       goto :eof
:loop1
if not defined x set x=%~x2
       set var=1%~n1
       set/a var+=1
       echo %ph%%var:~1%%x%
       if not "%var:~1%"=="%~n2" call :loop1 !var:~1! %~n2

[ Last edited by terse on 2008-3-25 at 11:58 PM ]



简单!简单!再简单!
2008-3-25 23:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by terse at 2008-3-25 11:51 PM:
这个怎么样
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do set ph=%%a&goto lop
:lop
for /f "skip=1 delims=" %%i in (cxc.txt) do (
...

看样子挺复杂的,是不是将你这个复制下来,做成一个bat文件,然后把刚才的:
D:\1\
000010.pdg, 000087.pdg, 000092.pdg-000093.pdg, 000095.pdg-000097.pdg, 000102.pdg, 000105.pdg-000108.pdg, 000117.pdg
拷到a.txt。
然后将这个bat文件和a.txt文件一块复制到D:\1\中,运行bat文件就行了?
有点太复杂,看不太懂,请指点。

2008-3-25 23:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by heitianma at 2008-3-25 23:59:

将这个复制下来,做成一个bat文件,和检查报告同目录

将a.txt换成检查报告名
另:刚才将a.txt写了cxc.txt名 都替换为你的检查报告名

[ Last edited by terse on 2008-3-26 at 12:26 AM ]



简单!简单!再简单!
2008-3-26 00:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by heitianma at 2008-3-25 11:32 PM:

我把它做成bat文件放到那个目录里,运行后,没有效果。

没看是用echo的吗?没用del哦

2008-3-26 05:33
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by abcd at 2008-3-26 05:33 AM:


没看是用echo的吗?没用del哦

好像有点明白了,我说你们两位给的批处理好像把文件名显示一下,没有进行其它操作,是不是把echo换成del就行了?
经试用abcd的方法可用,呵呵,直接把echo换成del就行了。
而terse的方法把echo换成del后没有反映(换了两个echo),不知道什么原因,说是找不到路径。

[ Last edited by heitianma on 2008-3-26 at 10:24 AM ]

2008-3-26 10:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by heitianma at 2008-3-26 10:11:

好像有点明白了,我说你们两位给的批处理好像把文件名显示一下,没有进行其它操作,是不是把echo换成del就行了?
经试用abcd的方法可用,呵呵, ...

你说生成的一个检查报告在那里?把BAT放进去  然后把BAT里的A.TXT改为你的检查报告名,
我这里用A.TXT测试没问题



简单!简单!再简单!
2008-3-26 11:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
heitianma
初级用户





积分 22
发帖 9
注册 2008-3-25
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by terse at 2008-3-26 11:14 AM:

你说生成的一个检查报告在那里?把BAT放进去  然后把BAT里的A.TXT改为你的检查报告名,
我这里用A.TXT测试没问题

首先说声非常感谢!
我的报告是txt文件,里面内容是:
D:\1\
000010.pdg, 000087.pdg, 000092.pdg-000093.pdg, 000095.pdg-000097.pdg, 000102.pdg, 000105.pdg-000108.pdg, 000117.pdg
我把这个txt文件命名为a.txt,然后把你所给的批处理中的后两个echo(一共是三个)换成del,另存为1.bat,然后把这两个文件放到D:\1\文件下,运行1.bat。
是不是这样操作?

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


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



论坛跳转: