标题: [文本处理] 批处理怎样根据某个内容删除目录下的文件? [打印本页]
作者: 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:复制代码
3行.txt:- d:\1.txt
- d:\中文.txt
- d:\2.txt
复制代码
执行 findstr /vxlg:2行.txt 3行.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 编辑
- @echo off
- SetLocal
-
- set "file=文件列表.txt"
-
- rem 把列表中的文件名设为变量
- for /f "usebackq delims=" %%i in ("%file%") do set ?%%~nxi=d
-
- rem 提取列表中的第一行路径,再从该路径提取文件夹路径
- set /p FullPath=<"%file%"
- for %%i in ("%FullPath%") do set Folder=%%~dpi
-
- rem 罗列文件夹中的文件,如果文件名没有设为变量,则删除该文件
- for %%i in ("%Folder%\*") do (
- if not defined ?%%~nxi del /a /f "%%i"
- )
复制代码
作者: yutianlian 时间: 2011-4-2 09:21
非常感谢楼上,实现功能
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |