繁体   English   中英

批处理文件以删除文件夹中的文件

[英]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”文件夹包含以下文件:

  1. XXX_blah.bmp的副本;
  2. XXX_blah.bmp;
  3. XXX_1234.ppt;
  4. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM