【问题标题】:How to search/delete multiple subfolders?如何搜索/删除多个子文件夹?
【发布时间】:2021-09-11 05:21:31
【问题描述】:

我有一个“清理”批处理程序,它位于父目录中并删除目录“树”中的某些无关文件。 一个功能是删除额外的“.backup”保存文件夹(只是.backup,不是主文件夹) 供参考,文件夹路径如下:

\Parent folder (w/ my .bat)
  \Saves
    \save 1\save files
    \save 1.backup\save files
    \save 2\save files
    \save 2.backup\save files
    (etc)

我可以使用删除不需要的子文件夹

for /d %%x in (Saves\*.backup) do rd /s /q "%%x"

但是,我想在代码中添加一个检查,以验证文件夹是否已被实际删除,并给出成功、失败、无文件夹等结果的正确消息。

我可以通过使用 IF EXIST/IF NOT EXIST 参数的 file 删除函数来做到这一点,但我无法将这些应用于子文件夹删除。

我可以在保存文件夹中查找文件以满足 EXIST/NOT EXIST 参数,但是在子文件夹名称中使用 * 通配符似乎是在给工作带来麻烦,并且程序无法检测到任何文件夹/文件使用该语句。但是,如果我直接定义一个特定的保存文件夹,子程序将完美运行。

所以:

if not exist "Saves\save 1.backup\*.*" ( goto nofile )
if exist "Saves\save 1.backup\*.*" ( for /d %%x in (Saves\*.backup) do rd /s /q "%%x" )

将删除正确的文件夹(如果没有有效的文件夹,则给出一条消息),但是

if not exist "Saves\*.backup\*.*" ( goto nofile )
if exist "Saves\*.backup\*.*" ( for /d %%x in (Saves\*.backup) do rd /s /q "%%x" )
 

不删除任何内容,只是给出我的“nofile”消息。

显然,指定每个可能的保存名称不是一种选择。

有什么解决办法吗?

附言为了避免任何额外的问题:我想[偶尔]删除这些备份,因为程序每次保存时都会创建一个新备份。

【问题讨论】:

  • 通配符只能用在last路径元素中……

标签: windows batch-file cmd subdirectory


【解决方案1】:

您可以在命令rd之后将文件夹检入for循环。

for /d %%x in (Saves\*.backup) do (
  rd /q /s %%x
  if exist %%x (echo Failed) else echo Success
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多