标题: [文件操作] 删除多级文件夹下的指定文件 [打印本页]
作者: kmustwxw 时间: 2014-11-29 13:11 标题: 删除多级文件夹下的指定文件
问题描述:在一个PDF.TXT的文本文档里百是要删除的文件名和扩展名,形如:集有(2013)第04393号.pdf
集有(2013)第04396号.pdf
集有(2013)第04404号.pdf ……格式(这个文本文档是用dir /b 命令提取出来的,每行一个完整的名字。),但是这些PDF文件存在于多级子目录里,要找到并删除这些PDF文件,如何写代码?谢谢,不知道我的描述是不是清楚?
作者: terse 时间: 2014-11-29 13:33
你的意思保留根目录的 删除子目录的?
作者: kmustwxw 时间: 2014-11-29 13:46
不是的,只要是PDF的名字和txt文本中的一样就删除,不管是根目录,还是子目录。另外,只有子目录才有pdf文件,根目录中没有,不知道我说的是不是清楚?
作者: kmustwxw 时间: 2014-11-29 17:12
回复 2# terse 不知道我说的是不是清楚,麻烦你帮我再看下,谢谢。
作者: apang 时间: 2014-11-29 17:46
先看看回显结果是否正确,如果没问题,删掉第4行的echo- @echo off
- (for /f "delims=" %%a in (PDF.txt) do echo,\\%%a$)>$
- for /f "delims=" %%a in ('dir /a-d /b /s *.PDF^|findstr /ig:$') do (
- echo del "%%a"
- )
- del $
- pause
复制代码
作者: kmustwxw 时间: 2014-11-29 18:01
回复 5# apang 你写的是正确的,回显结果正是我想要的,我刚学习bat不久,你的这种写法我从来没有看到过,学习了。我想请教一下:- @echo off&setlocal enabledelayedexpansion
- For /F "Delims=" %%i In ('Dir /A:-D /S /B *.pdf') Do (
- set /p file=
- If exist !file!=="%%~nxi" Del "%%~i"
- )<PDF.txt
- pause
复制代码
按照这个思路能写的好吗?帮我修改一下。万分感谢。还有你的代码中:echo,\\%%a$)>$这段是怎么意思,麻烦稍微解释一下。
作者: apang 时间: 2014-11-29 19:43
本帖最后由 apang 于 2014-11-29 19:45 编辑
回复 6# kmustwxw
按照你这个思路,除非 PDF.txt 中的每一行与 Dir /A:-D /S /B *.pdf 显示的每一行完全对应,否则无法实现
猜测你是想要用循环嵌套的办法:- @echo off
- For /F "Delims=" %%i In ('Dir /A:-D /S /B *.pdf') Do (
- for /f "delims=" %%j in (PDF.txt) do (
- if /i "%%~nxi" == "%%j" del "%%i"
- )
- )
- pause
复制代码
echo,\\%%a$)>$ 是把PDF.txt每一行前面加路径字符(\\),后面加上表示结尾的字符($),然后生成一个临时文件$
作者: CrLf 时间: 2014-11-29 20:53
本帖最后由 CrLf 于 2014-11-29 21:53 编辑
危险动作请先测试:- for /f "delims=" %%a in (PDF.txt) do del /s /f /a "%%a"
复制代码
靠,特么复制错了,赶紧改过来...
作者: apang 时间: 2014-11-30 01:11
回复 8# CrLf
卧槽,del 的 /s 开关完全不记得了。输入 DEL /?,还真有,脑袋现处于半停工、全混乱状态,呵呵。
作者: CrLf 时间: 2014-11-30 01:17
回复 9# apang
←_←又喝醉啦嗯嗯?
作者: kmustwxw 时间: 2014-11-30 12:17
回复 8# CrLf 你是说哪里错了? apang的代码吗??
作者: CrLf 时间: 2014-11-30 12:56
回复 11# kmustwxw
是说自己的代码,有一部分是复制 apang 的,结果忘记把 *.pdf 改成 "%%a",现在已经改好了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |