【问题标题】:How to search folder name and delete sub folders, but not searched folder如何搜索文件夹名称并删除子文件夹,但不搜索文件夹
【发布时间】:2012-10-03 13:20:54
【问题描述】:

我需要一个批处理文件来提示用户输入文件路径和文件夹名称中的前 3 个字母。然后批处理将删除具有这三个字母的文件夹中的所有文件夹和文件,但保留以这三个字母开头的文件夹。我有一个批处理文件,可以删除文件夹和子文件夹中的所有文件,但我也需要它来删除子文件夹。这是我删除所有文件的代码:

@echo off
set /p filepath=Path to Main Directory: 
set /p string=First Letters of Sub-Folders to be Cleansed: 
FOR /D %%G in ("%filepath%\%string%*") DO del "%%G\*.*" /q /s
echo Done
pause

然后我尝试了很多不同的方法来删除%%G的子文件夹。我在这里命名%%G 的子文件夹:

@echo off
set /p filepath=Path to Main Directory: 
set /p string=First Letters of Sub-Folders to be Cleansed:
FOR /D %%G in ("%filepath%\%string%*") DO for /r /d %%i in (%%G\*) do del "%%G\*.*" /q && echo %%i
echo Done
pause

但是当我尝试在末尾添加&& rd /s /q %%i 时,它显示找不到文件和路径。

【问题讨论】:

  • 我认为这可能有点令人困惑,我有一个名为 test 的文件夹。其中有 exp1 和 exp2。在 exp1 中有一个名为 test2 的文件夹,其中包含 test.txt。我想要一个在文件夹名称中搜索 exp 的批处理文件,然后删除 test2 和 test.txt 以及任何其他子文件夹或文件。

标签: batch-file search cmd directory delete-file


【解决方案1】:

无需递归查找“exp1”文件夹中的文件夹。您可以简单地使用 FOR /D 列出子文件夹,然后使用 RD /Q /S 删除以每个子文件夹为根的整个文件夹层次结构。此外,由于无论如何都会删除所有子文件夹,因此无需执行递归文件删除。

@echo off
set /p filepath=Path to Main Directory:
set /p string=First Letters of Sub-Folders to be Cleansed:
for /d %%G in ("%filepath%\%string%*") do (
  del "%%G\*" /q
  for /d %%F in ("%%G\*") do rd /s /q "%%F"
)
echo Done
pause

【讨论】:

  • 好的,但我需要在这段代码中添加其他内容,现在它会删除每个文件夹,但我希望它不会删除以 my.例如我的文档和我的音乐。我可以在 for 循环中做一个例外,或者我可以说每个不包含 My 的子文件夹吗?