Board logo

标题: [文本处理] 批处理怎样根据某个内容删除目录下的文件? [打印本页]

作者: yutianlian    时间: 2011-4-1 14:21     标题: 批处理怎样根据某个内容删除目录下的文件?

在一个目录里,怎么根据EXCEL表或文本文件已列出目录所有文件名,把没有列出的文件删除掉
作者: CrLf    时间: 2011-4-1 16:07

for /f "delims=" %%a in ('dir /b^|findstr /v /g:1.txt') do del /q %%a
作者: tmplinshi    时间: 2011-4-1 17:26

本帖最后由 tmplinshi 于 2011-4-1 21:45 编辑
for /f "delims=" %%a in ('dir /b^|findstr /v /g:1.txt') do del /q %%a
zm900612 发表于 2011-4-1 16:07

很多漏洞:

1、del /q "%%a"

2、dir /b /a:-d

3、findstr 是不是应该加上:

/x 匹配整行
/l 按字面匹配

另外,斜线(“/”或“\”)跟中文字符并在一起时,会出现 BUG。例如:

2行.txt:
  1. d:\1.txt
  2. d:\中文.txt
复制代码
3行.txt:
  1. d:\1.txt
  2. d:\中文.txt
  3. d:\2.txt
复制代码
执行 findstr /vxlg:2行.txt 3行.txt,结果为:
d:\中文.txt
d:\2.txt

如果斜线和中文字符没有并在一起,例如 d:\o中文.txt,则结果正常。
作者: yutianlian    时间: 2011-4-1 17:31

本帖最后由 yutianlian 于 2011-4-1 17:37 编辑

看不明白
试了二楼的,把文本里有记录的都删了
是要把文本里没有记录的删掉

可能表达错了
在一个目录里,已把目录里(如D:\aa)所有文件名都用EXCEL表或文本文件登记了,把该目录其它没有登记的文件删除掉
作者: CrLf    时间: 2011-4-1 17:52

3# tmplinshi


有道理,初学bat时,发帖前必做实验,现在手懒了,考虑不周的地方也越来越多了,呵呵,谢谢指正
作者: tmplinshi    时间: 2011-4-1 19:02

本帖最后由 tmplinshi 于 2011-4-1 19:08 编辑
  1. @echo off
  2. SetLocal
  3. set "file=文件列表.txt"
  4. rem 把列表中的文件名设为变量
  5. for /f "usebackq delims=" %%i in ("%file%") do set ?%%~nxi=d
  6. rem 提取列表中的第一行路径,再从该路径提取文件夹路径
  7. set /p FullPath=<"%file%"
  8. for %%i in ("%FullPath%") do set Folder=%%~dpi
  9. rem 罗列文件夹中的文件,如果文件名没有设为变量,则删除该文件
  10. for %%i in ("%Folder%\*") do (
  11.     if not defined ?%%~nxi del /a /f "%%i"
  12. )
复制代码

作者: yutianlian    时间: 2011-4-2 09:21

非常感谢楼上,实现功能




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2