[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样根据某个内容删除目录下的文件?

在一个目录里,怎么根据EXCEL表或文本文件已列出目录所有文件名,把没有列出的文件删除掉

for /f "delims=" %%a in ('dir /b^|findstr /v /g:1.txt') do del /q %%a
1

评分人数

TOP

本帖最后由 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,则结果正常。

TOP

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

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

可能表达错了
在一个目录里,已把目录里(如D:\aa)所有文件名都用EXCEL表或文本文件登记了,把该目录其它没有登记的文件删除掉

TOP

3# tmplinshi


有道理,初学bat时,发帖前必做实验,现在手懒了,考虑不周的地方也越来越多了,呵呵,谢谢指正

TOP

本帖最后由 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. )
复制代码
2

评分人数

TOP

非常感谢楼上,实现功能

TOP

返回列表