使用具有日期之前的日期的特定名称删除所有文件夹中的所有文件

时间:2017-09-06 07:58:09

标签: windows batch-file

在我的硬盘中,我有以下结构:

ROOTFOLDER   
├───FOLDER1
│   └───TMPFOLDER
│       ├───FOLDERTODELETE1
│       ├───FOLDERTODELETE2
│       └───FOLDERTODELETE3
├───FOLDER2
│   └───TMPFOLDER
│       ├───FOLDERTODELETE4
│       └───FOLDERTODELETE5
└───FOLDER3
    └───TMPFOLDER
        ├───FOLDERTODELETE6
        ├───FOLDERTODELETE7
        └───FOLDERTODELETE8

我需要创建一种脚本(我正在考虑批处理文件,但任何其他解决方案都会受到赞赏)删除每个文件夹中具有特定名称的所有文件夹(在这种情况下) TMPFOLDER)和在今天之前创建

2 个答案:

答案 0 :(得分:1)

根据您的需求,下面的批处理脚本将满足您的需求。如果可以,请删除echo命令前面的rmdir。请注意脚本使用当前工作目录。如果要询问每个应删除的目录,请删除/q

@echo off

set "tmpfolder=TMPFOLDER"

for /f "tokens=*" %%D in ('dir /b /a:d "*"') do (
   for /f "tokens=*" %%E in ('dir /b /a:d "%%D\*" ^| findstr /l /x %tmpfolder%') do (
      echo Found temp folder: "%%D\%%E"
      for /f "tokens=*" %%F in ('dir /b /a:d "%%D\%%E\*"') do (
         echo rmdir /s /q "%%D\%%E\%%F"
      )
   )
)

编辑#1:

以上脚本处理应删除的文件夹的创建日期。您只想删除在今天之前具有创建日期的文件夹。以下脚本负责这一点。看here how to get dates of folderhere how to compare dates

@echo off
setlocal EnableDelayedExpansion

set "tmpfolder=TMPFOLDER"

for /f "tokens=*" %%D in ('dir /b /a:d "*"') do (
   for /f "tokens=*" %%E in ('dir /b /a:d "%%D\*" ^| findstr /x /c:"%tmpfolder%"') do (
      rem echo Found temp folder: "%%D\%%E"
      for /f "tokens=*" %%F in ('dir /b /a:d "%%D\%%E\*"') do (
         rem echo    Subfolder: "%%F"
         set "curdate=!date!"
         set "dirdate="
         echo GETDATE
         call :getdate dirdate "%%D\%%E\%%F"
         set "dirdate=!dirdate:~-4!!dirdate:~3,2!!dirdate:~0,2!"
         set "curdate=!curdate:~-4!!curdate:~3,2!!curdate:~0,2!"

         rem echo    dirdate: "!dirdate!"
         rem echo    curdate: "!curdate!"
         rem echo.

         if [!dirdate!] LSS [!curdate!] (
            echo rmdir /s /q "%%D\%%E\%%F"
         )
      )
   )
)
goto :EOF

:getdate
rem call: getdate date(dstParam) folder(srcParam)
for /f "skip=5 tokens=1 delims= " %%A in ('dir /a:d /o:d /t:c "%~2"') do (
   set "%~1=%%A"
   goto :EOF
)

来自ss64.com的命令参考链接:

答案 1 :(得分:1)

虽然答案已经被接受,但我决定将这个未经考验的想法作为替代方案发布:

@Echo Off
SetLocal EnableDelayedExpansion

For /F "Delims=" %%A In ('WMIC OS Get LocalDateTime') Do For %%B In (%%~nA
) Do Set "TD=%%B" & Set "TD=!TD:~,8!"

For /D /R "ROOTFOLDER" %%A In ("TMPFOLD?R") Do If /I "%%~nxA"=="TMPFOLDER" (
    Set "FP=%%~pA" & Set "FP=!FP:\=\\!"
    WMIC FSDir Where "Path='!FP!' And FileName='TMPFOLDER'" Get CreationDate^
     |FindStr/B "%TD%">Nul||Echo=RD/S/Q "%%A")
Timeout -1

您可能需要根据需要更改ROOTFOLDERTMPFOLDER的所有实例,记住使用?替换第一个TMPFOLDER中的一个字符1}}

如果输出显示正确,请从最上面的行中移除最后一行和Echo=