删除早于特定文件修改日期的文件

时间:2019-05-15 15:56:45

标签: batch-file

我有一个包含.bak和.log文件的文件夹。

我想删除7天以上的.bak文件,但保留最后4天,我这样做 forfile跳过。

然后我要删除所有早于最后一个restg .bak文件的修改日期的.log文件,这是我遇到的问题。如何找到旧.bak文件的修改日期,然后与之比较在删除.log上?

pushd "C:\temp2"
for %%X in (bak) do (
  set "skip=1"
  for /f "skip=4 delims=" %%F in ('dir /b /a-d /o-d /tw *.%%X') do (
    if defined skip forfiles /d -1 /m "%%F" >nul 2>nul && set "skip="
    if not defined skip del "%%F" 
  )
) 

for %%a in ("C:\temp2\*.bak" /O:-D ) do set FileDate=%%~ta
forfiles /P "C:\temp2\*.log" /S /D -%FileDate%  "cmd /C del @file"

1 个答案:

答案 0 :(得分:0)

这是为您提供的示例,它使用而不是效率较低的命令。

@Echo Off
CD /D "C:\temp2" 2>Nul || Exit /B
If Not Exist *.bak Exit /B
Set "RO=/NS /NJS /NJH /NDL /NC"
Set "DM="
For /F "Skip=3 Tokens=1,2*" %%A In (
    'RoboCopy . $tmp *.bak /TS %RO% /MINAGE:7 /L ^| Sort /R'
) Do If Not Defined DM (Set "DM=%%A") Else Del "%%C"
If Not Exist *.log Exit /B
If Not Defined DM (For /F "Tokens=1,2*" %%A In (
    'RoboCopy . $tmp *.bak /TS %RO% /L ^| Sort /R') Do Set "DM=%%A")
If Defined DM (RoboCopy . $tmp *.log %RO% /MOV /MINAGE:%DM:/=% > Nul
    RD /S /Q $tmp 2> Nul)

代码使用然后在源目录C:\temp2中删除名为$tmp的临时目录。如果您可能已经在该位置使用该名称创建了目录,则可以将1213行上的名称更改为不太可能。