无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7871|回复: 23

[求助] 如何根据LIST.TXT列表保留文件夹的文件写个批处理

[复制链接]
发表于 2018-9-24 09:06:54 | 显示全部楼层 |阅读模式
本帖最后由 双响炮 于 2018-9-24 09:15 编辑

想根据列表文件D:\LIST.TXT文件保留D:\XUNLEIVIP中相同文件名文件和不同后缀名的文件,删除后缀名相同但文件名不同的文件,写了个批处理执行不了,请大神们指点一下,网上看教程实在是弄不明白了。
  1. ::设置待处理目录
  2. set SrcDir=D:\xunleivip

  3. ::设置列表文件
  4. set LstFile=d:\list.txt

  5. for /f "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*"') do (
  6.     for /f "delims=" %%b in ('findstr /i  "^%%~b$" "%LstFile%"' ) do (
  7.          if not "%%~nxa"=="%%b (echo  del /f /q "%%~a")
  8.     )
  9.    rd "%%~dpa"
  10. )
  11. echo end ...
  12. pause
复制代码
发表于 2018-9-26 13:36:01 来自手机 | 显示全部楼层
双响炮 发表于 2018-9-26 09:47
回家就重装系统,昨天就怀疑了,再次感谢牛大的耐心指导!!!

好几次了,难道你都没有发现?|前面是需要有转义符号的

还有一种方法,文件属性法,给保留的文件添加只读隐藏系统属性,del命令默认无法删除这些属性的文件,然后再取消属性就可以了

点评

受教受教,又学习了好多  详情 回复 发表于 2018-9-26 19:55
回复

使用道具 举报

发表于 2018-9-24 10:49:50 | 显示全部楼层
可能是我老了,理解力不够了。没看懂你的逻辑,大概猜的是:只留下单只后缀名的文件?

20180924104923436.jpg
只留下一个文件?
回复

使用道具 举报

 楼主| 发表于 2018-9-24 14:06:28 | 显示全部楼层
可能我表达得不清楚,上图说明一下:
无标题.png
在文件夹xunleivip中要删除的是除了basecommunity.dll和downloadkernel.dll之外的所有后缀名为.dll的文件,其它文件和文件夹均保留
回复

使用道具 举报

发表于 2018-9-24 14:40:36 | 显示全部楼层
本帖最后由 窄口牛 于 2018-9-24 14:43 编辑
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f %%a in ('dir D:\XUNLEIVIP\*.dll /a-d /b^|findstr /v "basecommuny.dll downloaderkernel.dll"') do (
  4. echo del /q D:\XUNLEIVIP\%%a
  5. )
复制代码

点评

老大这个方法应该可行,可是如果我的LIST.TXT的文件很多就不适用了,是吧  详情 回复 发表于 2018-9-24 20:09
回复

使用道具 举报

发表于 2018-9-24 18:40:24 | 显示全部楼层
这个要mark 学习一下。
回复

使用道具 举报

 楼主| 发表于 2018-9-24 20:09:38 | 显示全部楼层

老大这个方法应该可行,可是如果我的LIST.TXT的文件很多就不适用了,是吧

点评

尝试将findstr /v "basecommuny.dll downloaderkernel.dll" 改成 findstr /v /g:d:\list.txt  详情 回复 发表于 2018-9-24 20:29
回复

使用道具 举报

发表于 2018-9-24 20:29:29 | 显示全部楼层
双响炮 发表于 2018-9-24 20:09
老大这个方法应该可行,可是如果我的LIST.TXT的文件很多就不适用了,是吧

尝试将findstr /v "basecommuny.dll downloaderkernel.dll" 改成

findstr /v /g:d:\list.txt

点评

不行,没任何反应  详情 回复 发表于 2018-9-24 21:14
回复

使用道具 举报

发表于 2018-9-24 21:14:17 来自手机 | 显示全部楼层
可以的,findstr支持多字段。

点评

我的意思是说不能把所有的保留文件都在批处理中列出来 呀,不然那个LIST.TXT文件就失去意义了  详情 回复 发表于 2018-9-24 21:21
回复

使用道具 举报

 楼主| 发表于 2018-9-24 21:14:41 | 显示全部楼层
nttwqz 发表于 2018-9-24 20:29
尝试将findstr /v "basecommuny.dll downloaderkernel.dll" 改成

findstr /v /g:d:\list.txt

不行,没任何反应

点评

呃~ 你都不会多试一下,牛大的思路没有问题 /V 只打印不包含匹配的行。 /G:file 从指定的文件获得搜索字符串。 例如:查找system32下的exe文件,并从结果中排除从a-g开头、从m-r开头的文件 dir  详情 回复 发表于 2018-9-24 22:57
回复

使用道具 举报

 楼主| 发表于 2018-9-24 21:21:19 | 显示全部楼层
窄口牛 发表于 2018-9-24 21:14
可以的,findstr支持多字段。

我的意思是说不能把所有的保留文件都在批处理中列出来 呀,不然那个LIST.TXT文件就失去意义了
回复

使用道具 举报

发表于 2018-9-24 22:57:28 | 显示全部楼层
双响炮 发表于 2018-9-24 21:14
不行,没任何反应

呃~ 你都不会多试一下,牛大的思路没有问题

/V         只打印不包含匹配的行。
/G:file    从指定的文件获得搜索字符串。


例如:查找system32下的exe文件,并从结果中排除从a-g开头、从m-r开头的文件
dir c:\windows\system32\*.exe /b|findstr /v /i /g:"c:\dirlist.txt"

dirlist.txt内容

^[a-g]
^[m-r]

点评

我做了个简单的测试,在xunleivip目录下拷贝了4个.DLL文件,分别是: 然后新建了一个list.txt文件,内容为: 先试着运行,发现运行结果是4个.DLL文件,并没有排除BaseCommunity.dll, 后来修改了list.txt文件的内  详情 回复 发表于 2018-9-25 14:31
回复

使用道具 举报

发表于 2018-9-25 08:22:11 来自手机 | 显示全部楼层
老大的也没错,应该可以的。
回复

使用道具 举报

 楼主| 发表于 2018-9-25 14:31:01 | 显示全部楼层
nttwqz 发表于 2018-9-24 22:57
呃~ 你都不会多试一下,牛大的思路没有问题

/V         只打印不包含匹配的行。

我做了个简单的测试,在xunleivip目录下拷贝了4个.DLL文件,分别是:
  1. BaseCommunity.dll,DownloadClient.dll,DownloadKernel.dll,DownloadServer.dll
复制代码

然后新建了一个list.txt文件,内容为:
  1. d:\xunleivip\BaseCommunity.dll
复制代码

先试着运行
  1. dir D:\xunleivip\*.dll /a-d /b|findstr /v /i /g:"d:\list.txt"
复制代码
,发现运行结果是4个.DLL文件,并没有排除BaseCommunity.dll,
后来修改了list.txt文件的内容为:
  1. BaseCommunity.dll
复制代码
,再次运行结果正常,只有另外三个DLL文件了。
最后再运行:
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f %%a in ('dir D:\xunleivip\*.dll /a-d /b|findstr /v /i /g:"d:\list.txt"') do (echo del /q "D:\XUNLEIVIP\%%a")
  4. pause
复制代码
,结果xunleivip文件夹里所有的DLL文件都在,一个都没有删除,是不是我哪里搞错啦?
回复

使用道具 举报

发表于 2018-9-25 15:07:28 来自手机 | 显示全部楼层
列表内容不要路径,一行一个。

点评

对对,列表内容去掉路径后查看确实就正常了,可是不删除是咋回事?  详情 回复 发表于 2018-9-25 15:17
回复

使用道具 举报

 楼主| 发表于 2018-9-25 15:17:22 | 显示全部楼层
窄口牛 发表于 2018-9-25 15:07
列表内容不要路径,一行一个。

对对,列表内容去掉路径后查看确实就正常了,可是不删除是咋回事?
回复

使用道具 举报

发表于 2018-9-25 15:59:22 来自手机 | 显示全部楼层
echo去掉,才会删除。汗。

点评

没用,这个我自己也发现了,去掉ECHO也不删除。  详情 回复 发表于 2018-9-25 16:32
回复

使用道具 举报

 楼主| 发表于 2018-9-25 16:32:02 | 显示全部楼层
窄口牛 发表于 2018-9-25 15:59
echo去掉,才会删除。汗。

没用,这个我自己也发现了,去掉ECHO也不删除。
回复

使用道具 举报

发表于 2018-9-25 16:51:02 来自手机 | 显示全部楼层
那就奇怪了,each出来也没问题吧?

点评

不如我直接传附件上来,牛大试试  详情 回复 发表于 2018-9-25 19:03
回复

使用道具 举报

 楼主| 发表于 2018-9-25 19:03:32 | 显示全部楼层
窄口牛 发表于 2018-9-25 16:51
那就奇怪了,each出来也没问题吧?

不如我直接传附件上来,牛大试试 list.rar (710.85 KB, 下载次数: 11)
回复

使用道具 举报

发表于 2018-9-26 08:11:49 | 显示全部楼层
h.gif


  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f %%a in ('dir D:\xunleivip\*.dll /a-d /b^|findstr /v /i /g:"d:\list.txt"') do (
  4. del /q "D:\XUNLEIVIP\%%a"
  5. )


  6. pause>nul
复制代码

点评

回家就重装系统,昨天就怀疑了,再次感谢牛大的耐心指导!!!  详情 回复 发表于 2018-9-26 09:47
回复

使用道具 举报

 楼主| 发表于 2018-9-26 09:47:40 | 显示全部楼层

回家就重装系统,昨天就怀疑了,再次感谢牛大的耐心指导!!!

点评

好几次了,难道你都没有发现?|前面是需要有转义符号的 还有一种方法,文件属性法,给保留的文件添加只读隐藏系统属性,del命令默认无法删除这些属性的文件,然后再取消属性就可以了  详情 回复 发表于 2018-9-26 13:36
回复

使用道具 举报

 楼主| 发表于 2018-9-26 19:55:16 | 显示全部楼层
nttwqz 发表于 2018-9-26 13:36
好几次了,难道你都没有发现?|前面是需要有转义符号的

还有一种方法,文件属性法,给保留的文件添加 ...

受教受教,又学习了好多
回复

使用道具 举报

发表于 2018-10-29 18:08:16 | 显示全部楼层
想赚点零用钱。给家庭减少一点负担。加我微信:wiyu098或者hanhanling3366 不会让你们失望的噢!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 17:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表