Batchfile删除所有文件夹,但删除最新的AND特殊文件夹



希望你能帮助我。我正在寻找一种方法,使用batchscript删除子文件夹中的所有文件夹,除外

  • 最新的文件夹AND
  • 一个名为"的特殊文件夹;BACKUP">

因此备份文件夹可以更旧,但需要保留。除日期最新的文件夹外,其他所有文件夹都应删除。

所有这些文件夹中都会有文件,但没有隐藏的文件或子文件夹,因此在这种情况下不需要考虑这一点。

我在这里找到了很多解决方案,可以腾出备份文件夹,也可以删除除最新文件夹之外的所有内容,但我似乎找不到一个既能做到这两者的解决方案。

for /d %%i in ("C:Parent*") do if /i not "%%~nxi"=="BACKUP" del /s /q "%%i"

也就是说,像这样,但它不会保留最新的文件夹。除了备份文件夹之外的所有其他文件夹都具有类似于"备份文件夹"的名称;20220215"20210405";。

谢谢你能提供的任何帮助。

KRSusanne

通过dir构建目录列表,按年龄从最新到最旧排序,通过findstr过滤掉不需要的目录,然后使用for /F迭代列表,但跳过第一项:

rem // Change into root directory:
pushd "C:Parent" && (
rem /* Loop through matching directories sorted by last modification date (due to `/T:W`)
rem    in descending order and skip the very first (that is the lastly modified) item: */
for /F "skip=1 delims= eol=|" %%I in ('
dir /B /A:D-H-S /O:-D /T:W "????????" ^| findstr /V /I /X "BACKUP"
') do rd /S /Q "%%I"
rem // Return from root directory:
popd
)

由于del只删除文件,因此rd也用于删除(子(目录,而不是留下空的(子(路径树。

为了进行更严格的过滤,dir /B /A:D-H-S /O:-D /T:W "????????" ^| findstr /V /I /X "BACKUP"行可以用以下内容代替:

dir /B /A:D-H-S /O:-D /T:W "????????" ^| findstr /I /X "[12][0123456789][0123456789][0123456789][01][0123456789][0123][0123456789]"
set "skipme=Y"
for /f "delims=" %%b in ('dir /b /ad /od "c:parent*"') do if /i "%%b" neq "backup" if defined skipme (set "skipme=") else (ECHO rd /s /q "c:parent%%b")

应删除所有必需的目录。好吧,报告如果删除了echo关键字将被删除的目录名称。

CCD_ 9被初始化为一个值。对于找到的每个目录,除了backup,检查skipme是否有值;如果设置了skipme(仅用于从按日期排序的dir列表中找到的第一个不是backup的目录(,则将其设置为,否则删除该目录。

最新更新