希望我能对我正在制作的批处理文件获得一些帮助。
我的批处理文件当前扫描目录并记录所有文件夹、子文件夹并将它们导出到 list.txt 文件中,方法如下:
dir /a "special\program\"/s /b /-p /o:gen >list.txt
而且效果很好。但是我现在想做的是扫描 list.txt 文件并从 .txt 文件中的路径中删除某些文件名,我不想删除文件类型,而是删除名称的一部分。
因为基本上每个文件夹中有超过 50 个文件,其中一些文件可能包含名称示例:
查看文件:file_kool.rar、fileOk.rar、somethingRANDOM.rar,我想删除其中没有名称“file”的文件,这样“somethingRANDOM.rar”,不包括 file_kool.rar 和 fileOk.rar ,但我不确定如何添加排除项,因为我无法指定要删除的每个文件名,因为它们太多了,所以我猜测它们是一种我可以使用通配符排除其中包含"file"的 .rar 文件的方法删除未注释的 .rar 文件?
我尝试过这个:
@echo off
::Check Directories, Sub-Folders and list all files within and save to a list.txt file
dir /a "special\program\"/s /b /-p /o:gen >list.txt
::Read list.txt and delete all .rar files accept for the exception ones with "file" in them
for /F "tokens=*" %%A in (list.txt) do del /s special\program\ *file?
或者代替这是他们在 robocopy 中排除文件的方法: 想法#2:
robocopy "program" "special\program" /e /xf *something.rar* *.rar /xd random random2 *file?
我尝试了这个,这是我之后的首选,但我无法弄清楚如何在排除项中添加这样一个事实:我想删除所有接受包含"file"(排除项)的 .rar 文件。
有没有人有解决办法。我确信他们是我所缺少的简单的东西?
注意:我已经解决了我的问题,对不起大家,当我输入它时,我把自己搞糊涂了。
最佳答案
下面的批处理文件将删除“special\program”文件夹中名称以“file”开头的所有文件:
cd "special\program"
del /S file*.*
如果要删除任意位置名称中包含“file”的文件,只需更改通配符即可:*file*.*
编辑:回复评论
在你的问题中,你说:“我想删除其中名称为“file”的文件”,所以我认为你想删除文件名任何部分包含“file”的文件。现在您在评论中说您想要相反的东西!我强烈鼓励您edit your question并明确这一点,包括您更改了原始问题的事实;否则,可能阅读此主题的人会感到困惑,直到他们阅读主题末尾的小评论... :-(
无论如何,下面的批处理文件会执行您想要的操作(我希望如此),即:删除“special\program”文件夹中的所有 .rar 文件除了那些具有“file”子字符串的文件文件名的任何部分。
@echo off
setlocal EnableDelayedExpansion
for /R "special\program" %%a in (*.rar) do (
set "filename=%%~Na"
if "!filename:file=!" equ "%%~Na" del "%%a"
)
关于batch-file - BATCH : How to read a . txt 文件删除具有特定文件名的某些列出的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189712/