如果文件夹包含特定文件,则删除文件夹

时间:2017-11-16 13:27:44

标签: windows batch-file cmd delete-file

我正在尝试创建将执行以下操作的批处理文件:

  1. 它将扫描特定目录中的所有子文件夹 具体文件。
  2. 如果它在子文件夹中找到文件,则所有内容都是 此子文件夹和子文件夹本身将被删除。
  3. 例如,我正在寻找的文件是" test.txt"和主文件夹是" C:\ Test"具有以下结构:

    \A
    \B with test.txt
    \C
    \C\C0
    \C\C1
    \C\C2 with test.txt
    \D 
    \D\D0 
    \D\D1 with test.txt
    \D\D1\D10 
    \D\D1\D11
    

    每个文件夹中都包含一些其他随机文件。

    在此示例中,脚本应删除以下文件夹及其所有内容:

    C:\Test\B
    C:\Test\C\C2
    C:\Test\D\D1
    

    我尝试了几种不同的脚本,但没有成功。批处理文件直接放在" C:\ Test \"

    我检查的第一个脚本是:

    for /R %%f in (test.txt) do @IF EXIST %%f @echo "%%f" 
    

    它正确地列出了文本夹中包含text.txt的路径。因为它有效,我尝试按照一个只删除测试文件:

    for /R %%f in (test.txt) do @IF EXIST %%f del /q /s /f "*.*" 
    

    删除了主文件夹中的所有文件以及批处理文件所在的所有子文件夹以及批处理文件本身。

    我尝试编辑其他几个脚本以符合我的条件,但结果很明显。我能够创造的最后一件事是:

    for /R %%p in (test.txt) do @IF EXIST %%p (rd "%%p" /s || del "*.*" /s/f)
    

    我在这里省略" / q"参数,以便能够看到它想要删除的内容。它首先正确找到" text.txt"文件。如果" y"选择删除此文件,脚本返回错误,这是不正确的文件夹。然后它开始从主文件夹和所有子文件夹中删除文件,其中批处理文件是第一个受害者(每次询问我是否要删除特定子文件夹中的文件)。子文件夹不会被删除,只会删除它们的内容。

    我没有想法。

2 个答案:

答案 0 :(得分:0)

当问题难以解决时,请将其拆分为两个。

1)将目录树列入临时文本文件,每行一个:

dir /ad /b /s %1 >%TEMP%\Temporary.txt

2)迭代列出的目录并按照每个目录执行所需的操作:

for /f %%g in (%TEMP%\Temporary.txt) do if exist %%g\test.txt rd /s /q %%g

答案 1 :(得分:0)

也许你有点过分了。如果您正在读取文件,只需执行rmdir即可自动删除目录中的文件和子文件夹。您的del *.*没有路径设置,将从工作目录中删除。

请注意,如果在脚本中使用引号,则测试文件夹不应包含引号。应该是:

  

c:\无论文件夹\文件夹

     

c:\无论文件夹\文件夹2

这应该可以正常工作。

for /F "eol=; tokens=*" %%p in (test.txt) do @if exist %%p (echo rd /S "%%p")

删除echo一旦您满意它只会删除您想要的内容。使用/ Q选项也可以帮助您删除而无需每次确认。

for /F "eol=; tokens=*" %%p in (test.txt) do @if exist %%p (rd /S /Q "%%p")