【发布时间】: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