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

时间:2010-10-12 16:25:11

标签: windows batch-file

我在目录中有许多包含各种文件的文件夹。每个文件名都以XXX_开头,其中XXX可以是文件所在文件夹的名称。我需要做的是浏览所有这些文件夹并删除任何文件,其中XXX是文件所在文件夹的名称。< / p>

3 个答案:

答案 0 :(得分:1)

请留意这个问题: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.   
  3. XXX_blah.bmp;
  4.   
  5. XXX_1234.ppt;
  6.   
  7. XXX_textfile.txt。
  8.   

从这个结构中,输出是:

  

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命令就可以了。这意味着要将foldername本身与其路径隔离,您需要将~n指令与文件夹变量名称一起使用,例如%%~nd,其中迭代文件夹变量名称为%%d

此外,您甚至可以在流程中使用参数化批处理文件,而不是对其进行硬编码,也就是说,如果您的'set YourFolder =...'是生产代码的一部分。这看起来像是:

@echo off

setlocal...

set root = %1
set root = %root:~1%
set root = %root:~0,-1%

...

endlocal

而不是在我的第一个'.'循环中显示FOR,而是将其替换为"%root%",以便考虑命令行参数而不是硬编码文件路径。

我真诚地帮助这有帮助!

答案 1 :(得分:0)

正如Ron所说,因为这个问题被标记为“windows”。

修改

罗恩的回答似乎已经消失了!是使用del /s

<强> EDIT2:

好的,它仅对文件名称有效,而不对目录有效。对于目录,您必须使用下面草拟的内容。

附加信息:当你想以递归方式对目录树中的文件做同样的事情时,(与del不同)没有已经为你进行遍历的命令,你可以使用{{1} } /R命令的选项。

要查看for命令的文档,请执行以下操作: for

干杯&amp;第h。,

- Alf

答案 2 :(得分:0)

cd C:\"foldername"
del /s XXX_"*"
cls
exit