我有一个包含.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"
答案 0 :(得分:0)
这是为您提供的batch-file示例,它使用robocopy而不是效率较低的forfiles命令。
@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
的临时目录。如果您可能已经在该位置使用该名称创建了目录,则可以将12
和13
行上的名称更改为不太可能。