Batch file 批处理:如何读取.txt文件以删除具有特定文件名的某些列出的文件

Batch file 批处理:如何读取.txt文件以删除具有特定文件名的某些列出的文件,batch-file,command-line,windows-7,cmd,command-prompt,Batch File,Command Line,Windows 7,Cmd,Command Prompt,希望能对我正在制作的批处理文件有所帮助 “我的批处理文件”当前扫描目录,记录所有文件夹和子文件夹,并通过执行以下操作将其导出到list.txt文件中: dir /a "special\program\"/s /b /-p /o:gen >list.txt 而且效果很好。但是,我现在要做的是扫描list.txt文件并从.txt文件的路径中删除某些文件名,我不想删除文件类型,而是删除部分名称 因为每个文件夹中有50多个文件,有些文件可能包含名称示例: 看看这些文件:fi

希望能对我正在制作的批处理文件有所帮助

“我的批处理文件”当前扫描目录,记录所有文件夹和子文件夹,并通过执行以下操作将其导出到list.txt文件中:

dir /a "special\program\"/s /b /-p /o:gen >list.txt
而且效果很好。但是,我现在要做的是扫描list.txt文件并从.txt文件的路径中删除某些文件名,我不想删除文件类型,而是删除部分名称

因为每个文件夹中有50多个文件,有些文件可能包含名称示例:

看看这些文件:file_kool.rar,fileOk.rar,something random.rar,我想删除那些没有名字“file”的文件,所以“somethingRANDOM.rar,不包括文件_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:

我尝试了这一个,这是我的首选,但我无法解决如何在排除中添加事实,即我想删除所有.rar文件接受包含“文件”(排除)的文件

有人有解决办法吗。我敢肯定他们的想法很简单,我在这里错过了什么

注意:我已经修正了我的问题对不起,大家,当我打印出来的时候,我把自己弄糊涂了

dir /a "special\program\"/s /b /-p /o:gen |find /v /i "file" >list.txt
应该按照你的要求去做


您拥有的数据示例以及您想要的数据示例……

下面的批处理文件将删除所有名称以“file”开头的文件,这些文件放在“special\program”文件夹中:

如果您想在任何位置删除包含“file”名称的文件,只需通过以下方式更改通配符:
*file*

编辑:回复评论

在你的问题中,你说:“我想删除文件名为“file”的文件,所以我认为你想删除文件名任何部分都有“file”的文件。现在你在评论中说你想要相反的东西!我强烈鼓励你把这一点讲清楚,包括你改变了原来的问题;否则,可能阅读此主题的人会感到困惑,直到他们在主题的最后阅读您的小评论<代码>:-(

不管怎么说,下面的批处理文件可以实现您想要的功能(我希望如此),即:删除“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"
)

您需要通过在问题中编辑一些具有代表性的数据来解释您试图实现的目标。您只是不清楚是要从报告中排除包含字符串“file”的行,还是要用其他内容替换报告中的字符串“file”(如
nothing
)或者重命名文件或删除文件,或者是否有其他目标名称列表,用于执行排除/删除/重命名,而不仅仅是名称“file”。否则,这只是一个猜测游戏…问题变了,Magoo。请注意,
文件
可能会随机出现在短文件名中,短文件名也会被解析,导致不必要的删除。为Aacini干杯,很抱歉出现混淆,希望我的问题现在有意义,在脱机几天后,重新阅读我的旧文件问得好,伙计,我当时很沮丧,无法发布我的意思。那么?我的第二个解决方案解决了你的问题吗?请重新表述你的问题。开始时,你声明你想删除文件*.rar,然后你不想从原始来源复制它们。这不是同一个问题。从你下面的r开始,你的问题是:mment,请更清楚地说明你必须处理的模式。它似乎比你最初的帖子更复杂。为这个建议干杯,我不知道我的问题有多困惑。
cd "special\program"
del /S file*.*
@echo off
setlocal EnableDelayedExpansion

for /R "special\program" %%a in (*.rar) do (
   set "filename=%%~Na"
   if "!filename:file=!" equ "%%~Na" del "%%a"
)