如何根据LIST.TXT列表保留文件夹的文件写个批处理
本帖最后由 双响炮 于 2018-9-24 09:15 编辑想根据列表文件D:\LIST.TXT文件保留D:\XUNLEIVIP中相同文件名文件和不同后缀名的文件,删除后缀名相同但文件名不同的文件,写了个批处理执行不了,请大神们指点一下,网上看教程实在是弄不明白了。
::设置待处理目录
set SrcDir=D:\xunleivip
::设置列表文件
set LstFile=d:\list.txt
for /f "delims=" %%a in ('dir /a-d/s/b "%SrcDir%\*"') do (
for /f "delims=" %%b in ('findstr /i"^%%~b$" "%LstFile%"' ) do (
if not "%%~nxa"=="%%b (echodel /f /q "%%~a")
)
rd "%%~dpa"
)
echo end ...
pause 可能是我老了,理解力不够了。没看懂你的逻辑,大概猜的是:只留下单只后缀名的文件?
只留下一个文件? 可能我表达得不清楚,上图说明一下:
在文件夹xunleivip中要删除的是除了basecommunity.dll和downloadkernel.dll之外的所有后缀名为.dll的文件,其它文件和文件夹均保留 本帖最后由 窄口牛 于 2018-9-24 14:43 编辑
@echo off
Setlocal enabledelayedexpansion
for /f %%a in ('dir D:\XUNLEIVIP\*.dll /a-d /b^|findstr /v "basecommuny.dll downloaderkernel.dll"') do (
echo del /q D:\XUNLEIVIP\%%a
) 这个要mark 学习一下。 窄口牛 发表于 2018-9-24 14:40
老大这个方法应该可行,可是如果我的LIST.TXT的文件很多就不适用了,是吧 双响炮 发表于 2018-9-24 20:09
老大这个方法应该可行,可是如果我的LIST.TXT的文件很多就不适用了,是吧
尝试将findstr /v "basecommuny.dll downloaderkernel.dll" 改成
findstr /v /g:d:\list.txt 可以的,findstr支持多字段。 nttwqz 发表于 2018-9-24 20:29
尝试将findstr /v "basecommuny.dll downloaderkernel.dll" 改成
findstr /v /g:d:\list.txt
不行,没任何反应 窄口牛 发表于 2018-9-24 21:14
可以的,findstr支持多字段。
我的意思是说不能把所有的保留文件都在批处理中列出来 呀,不然那个LIST.TXT文件就失去意义了 双响炮 发表于 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内容
^
^ 老大的也没错,应该可以的。 nttwqz 发表于 2018-9-24 22:57
呃~ 你都不会多试一下,牛大的思路没有问题
/V 只打印不包含匹配的行。
我做了个简单的测试,在xunleivip目录下拷贝了4个.DLL文件,分别是:BaseCommunity.dll,DownloadClient.dll,DownloadKernel.dll,DownloadServer.dll
然后新建了一个list.txt文件,内容为:d:\xunleivip\BaseCommunity.dll
先试着运行dir D:\xunleivip\*.dll /a-d /b|findstr /v /i /g:"d:\list.txt",发现运行结果是4个.DLL文件,并没有排除BaseCommunity.dll,
后来修改了list.txt文件的内容为:BaseCommunity.dll,再次运行结果正常,只有另外三个DLL文件了。
最后再运行:@echo off
Setlocal enabledelayedexpansion
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")
pause,结果xunleivip文件夹里所有的DLL文件都在,一个都没有删除,是不是我哪里搞错啦? 列表内容不要路径,一行一个。 窄口牛 发表于 2018-9-25 15:07
列表内容不要路径,一行一个。
对对,列表内容去掉路径后查看确实就正常了,可是不删除是咋回事? echo去掉,才会删除。汗。 窄口牛 发表于 2018-9-25 15:59
echo去掉,才会删除。汗。
没用,这个我自己也发现了,去掉ECHO也不删除。 那就奇怪了,each出来也没问题吧? 窄口牛 发表于 2018-9-25 16:51
那就奇怪了,each出来也没问题吧?
不如我直接传附件上来,牛大试试
@echo off
Setlocal enabledelayedexpansion
for /f %%a in ('dir D:\xunleivip\*.dll /a-d /b^|findstr /v /i /g:"d:\list.txt"') do (
del /q "D:\XUNLEIVIP\%%a"
)
pause>nul 窄口牛 发表于 2018-9-26 08:11
回家就重装系统,昨天就怀疑了:dizzy:,再次感谢牛大的耐心指导!!! 双响炮 发表于 2018-9-26 09:47
回家就重装系统,昨天就怀疑了,再次感谢牛大的耐心指导!!!
好几次了,难道你都没有发现?|前面是需要有转义符号的
还有一种方法,文件属性法,给保留的文件添加只读隐藏系统属性,del命令默认无法删除这些属性的文件,然后再取消属性就可以了 nttwqz 发表于 2018-9-26 13:36
好几次了,难道你都没有发现?|前面是需要有转义符号的
还有一种方法,文件属性法,给保留的文件添加 ...
受教受教,又学习了好多{:1_194:} 想赚点零用钱。给家庭减少一点负担。加我微信:wiyu098或者hanhanling3366 不会让你们失望的噢!!
页:
[1]