[英]Batch File to Delete Files in Folders
我的目录中有许多文件夹,其中包含各种文件。 每个文件名都以XXX_开头,其中XXX可以是文件所在的文件夹的名称。我需要做的是浏览所有这些文件夹,并删除其中XXX是该文件所在的文件夹的名称的任何文件。
请注意以下问题: Iterating through folders and files in batch file?
。
我认为这应该对您有帮助。
如果您需要进一步的帮助,请告诉我。
编辑#1
DOS命令行中的小丑字符是*
。 然后,在目录中搜索某些文件时,您可以考虑正则表达式,即XXX_
,并用*
完整,这将仅返回您要查找的文件。
这意味着,而不是*.zip
中的一个模式FOR
给出的链接的问题,你的第一个循环FOR
循环应该包含你的目录名,然后拿这个变量与级联*
字符只获得你要找的文件。
例如,考虑尝试以下操作:
dir /s XXX_*.*
给定正确的文件夹名称,这应该只返回您感兴趣的文件。
编辑#2
感谢您解决您的问题。
我希望这是一个示例代码,希望能有所帮助。 现在我知道您说您有正确的循环,因此也许只需要这段代码。
@echo off
setlocal enableextensions enabledelayedexpansion
for /F "delims==" %%d in ('dir /ogne /ad /b /s .') do (
for /F "delims==" %%f in ('dir /b "%%d\%%~nd_*.*"') do (
echo %%d\%%f
)
)
endlocal
这样可以正常工作,并列出当前( .
)文件夹中子文件夹中包含的文件。
我已经从以下文件夹进行了测试:
C:\\ Docume〜1 \\ marw1 \\ MyDocu〜1 \\ MyMusi〜1
包含“ XXX”文件夹的位置。 此“ XXX”文件夹包含以下文件:
- XXX_blah.bmp的副本;
- XXX_blah.bmp;
- XXX_1234.ppt;
- XXX_textfile.txt。
通过此结构,输出为:
C:\\ Docume〜1 \\ marw1 \\ MyDocu〜1 \\ MyMusi〜1 \\ XXX \\ XXX_blah.bmp C:\\ Docume〜1 \\ marw1 \\ MyDocu〜1 \\ MyMusi〜1 \\ XXX \\ XXX_1234.ppt C:\\ Docume〜1 \\ marw1 \\ MyDocu〜1 \\ MyMusi〜1 \\ XXX \\ XXX_textfile.txt
然后,我怀疑用del
指令代替echo
命令可以解决问题。 这意味着对文件夹名本身从它的路径隔离,您需要使用~n
指令与您的文件夹的变量名像%%~nd
,你的文件夹迭代变量名%%d
。
此外,您甚至可以在此过程中使用参数化的批处理文件,而不是对其进行硬编码,也就是说,如果您的'set YourFolder =...'
是生产代码的一部分。 可能看起来像:
@echo off
setlocal...
set root = %1
set root = %root:~1%
set root = %root:~0,-1%
...
endlocal
而不是使用'.'
如我的第一个FOR
循环中所示,您可以将其替换为"%root%"
,以便考虑您的命令行参数而不是硬编码的文件路径。
我确实会为此提供帮助,
cd C:\"foldername"
del /s XXX_"*"
cls
exit
正如罗恩所说,由于该问题被标记为“窗户”。
编辑:
罗恩的答案似乎已经消失了!是使用del /s
编辑2:
好的,它仅对文件名有效,对目录无效。 对于目录,您必须使用类似下面的草图。
附加信息:当您想对目录树中的文件进行递归操作时,并且(与del
不同)(没有del
)已经为您完成遍历,您可以使用for
命令的/R
选项。
要查看for
命令的文档,请执行例如start "for-help" cmd /k for /?
。
干杯,……
–阿尔夫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.