用于删除超过20分钟的文件的批处理脚本

问题描述 投票:-3回答:1

嗨,我刚接触批处理脚本我想创建批处理脚本,删除超过20分钟的文件。

我在互联网上搜索了一个批处理脚本:

@echo off
:: Wmic removes regional differences - it has problems with commas in filenames.
setlocal

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "stamp=%YYYY% %MM% %DD% %HH% %Min%"

call :DateToMinutes %stamp% NowMins

for /f "delims=" %%a in ('dir * /a-d /b') do call :CheckMins "%%~fa"
pause
goto :EOF

:CheckMins
set "filestamp="
set "filemins="
set "MinsOld="
set "YY=" & set "YYYY=" & set "MM=" & set "DD="
set "HH=" & set "Min=" & set "Sec=" & set "dt="
set "file=%~1"
set "filea=%file:\=\\%"
WMIC DATAFILE WHERE name="%filea%" get lastmodified | find "." >file.tmp
for /f %%a in (file.tmp) do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "filestamp=%YYYY% %MM% %DD% %HH% %Min%"
del file.tmp 2>nul

if not defined yyyy goto :EOF

call :DateToMinutes %filestamp% FileMins

set /a MinsOld=%NowMins%-%FileMins%
:: echo Now:%NowMins% File:%FileMins% Fileage:%minsold% "%~1"
if %MinsOld% gtr 20 del "%file%"
goto :EOF

:DateToMinutes
setlocal
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF

但它会删除当前目录中的文件。但我的方案是从特定位置删除文件。

batch-file
1个回答
1
投票

保存所有代码并使用PowerShell代替!

GCI 'C:\Users\UserName\Folder'|?{!$_PSIsContainer -And $_.LastWriteTime -LT (Get-Date).AddMinutes(-20)}|Rm -Wh

C:\Users\UserName\Folder更改为指定的文件夹。

如果您对输出感到满意,请从末尾删除-Wh并再次运行以执行实际删除。

如果您想要,您可以从批处理文件中执行相同的操作:

警告这已经删除了-Wh

@PowerShell -C "GCI 'C:\Users\UserName\Folder'|?{!$_PSIsContainer -And $_.LastWriteTime -LT (Get-Date).AddMinutes(-20)}|Rm"
© www.soinside.com 2019 - 2024. All rights reserved.