Soru Dosya çağına göre otomatik dosya silme


Herkes kendi yaşlarına göre dosyaları silmek için iyi bir yol biliyor ve periyodik olarak yaptık mı, bir toplu iş dosyası ve windows scheduler kullanarak söyle? (Ya da bunu yapacak başka herhangi bir iyi yazılım)


4
2017-09-18 13:48


Menşei


Sorunuzu zaten yanıtladı. - Andrejs Cainikovs


Cevaplar:


'Forfiles' için +1

İşte her gece çalışan bir toplu iş dosyasında kullanıyorum:

forfiles -pE: \ myfolder \ mysubfolder -m *. * -d-5 -c "cmd / C del / q @FILE"


6
2017-09-18 14:14



Mükemmel - bu tam olarak aradığım şey, teşekkürler bir demet! - jjrab


Kullanabilirsiniz forfiles commnad. Sadece doğrudan programlamak için windows scheduler'ı kullanın.

Daha fazla örnek.


3
2017-09-18 13:58





Evet, kullandığımız bir tane var. İnternette bulduk ve bazı değişiklikler yaptınız.

Bu şöyle çalışır

deletefiles.bat 5 C: \ Temp * .LOG 1

ve tüm günlük dosyalarını C: \ Temp ve alt dizinlerinden 5 günden daha eski olanları siler

Ah, bulundu orijinal gönderi

@echo off

CLS
:HouseKeeping
REM Start Time
REM This will load the current time into 'Start' variables.
REM.
Set Start_Time=%time%
FOR /f "tokens=1-3 delims=:." %%a in ('echo %time%') do (
set Start_hh=%%a
set Start_mm=%%b
set Start_ss=%%c
)

FOR /f "tokens=1-3 delims=: " %%a in ('time /t') do (set Start_Meridan=%%c)
Echo Start Time: %Start_hh%:%Start_mm%:%Start_ss% %Start_Meridan%
REM Echo Start Time: %Start_hh%:%Start_mm%:%Start_ss%

Set Delete_Counter=0
Set FChecked_Counter=0
Set Total_Files=0
Set Finish_day=0
SET OLDERTHAN=%1
SET FileDir=%~2
SET EXT=%3
SET Sub_Dir=%4
SET Force_Check=%5
IF NOT DEFINED OLDERTHAN GOTO SYNTAX
IF NOT DEFINED FileDir GOTO SYNTAX
IF NOT DEFINED EXT GOTO SYNTAX
IF NOT DEFINED Force_Check Goto Get_Date
IF DEFINED Force_Check Goto Read_Only
Goto Exit

:Read_Only
IF %Force_Check%==1 set Force_Delete=/F
Goto Get_Date

REM Get Todays Date
:Get_Date
FOR /f "tokens=1-4 delims=/- " %%a in ('date /t') do (
set xx=%%a
set mm=%%b
set dd=%%c
set yyyy=%%d
)

set /A mm=%mm%+0
if %dd%==01 set dd=1
if %dd%==02 set dd=2
if %dd%==03 set dd=3
if %dd%==04 set dd=4
if %dd%==05 set dd=5
if %dd%==06 set dd=6
if %dd%==07 set dd=7
if %dd%==08 set dd=8
if %dd%==09 set dd=9
set /A dd=%dd%+0
set /A dd=%dd% - %OLDERTHAN%
set /A yyyy=%yyyy%+0
:LOOPDATE

if /I %dd% GTR 0 Goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 Goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1
:ADJUSTDAY
if %mm%==1 Goto SET31
if %mm%==2 Goto LEAPCHK
if %mm%==3 Goto SET31
if %mm%==4 Goto SET30
if %mm%==5 Goto SET31
if %mm%==6 Goto SET30
if %mm%==7 Goto SET31
if %mm%==8 Goto SET31
if %mm%==9 Goto SET30
if %mm%==10 Goto SET31
if %mm%==11 Goto SET30
if %mm%==12 Goto SET31
:SET31
set /A dd=31 + %dd%
Goto LOOPDATE

:SET30
set /A dd=30 + %dd%
Goto LOOPDATE

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 Goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 Goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 Goto SET29

:SET28
set /A dd=28 + %dd%
Goto LOOPDATE

:SET29
set /A dd=29 + %dd%

:DONE
if /i %dd% LSS 10 set dd=0%dd%
rem if /I %mm% LSS 10 set mm=0%mm%

:Search_Type
IF NOT DEFINED Sub_Dir GOTO No_Sub_Dir
If %Sub_Dir%==0 Goto :No_Sub_Dir
If %Sub_Dir%==1 Goto :Sub_Directory
Else Goto :No_Sub_Dir

:No_Sub_Dir
for %%i in (%FileDir%\%EXT%) do (
set FileName=%%i
call :PROCESSFILE %%~ti)

Goto Print_Results

:Sub_Directory
for /R %FileDir% %%i in (%EXT%) DO (
set FileName=%%i
call :PROCESSFILE %%~ti)
Goto Print_Results

:Print_Results
Echo.
Echo The number of files deleted : %Delete_Counter%
Echo.
Echo The number of files passed over : %FChecked_Counter%
Echo.
Echo The Total number of files processed: %Total_Files%
Echo.
Goto Get_Finish_Time

:Get_Finish_Time
REM This will load the current time into 'Finish' variables.
REM.
FOR /f "tokens=1-3 delims=:." %%a in ('echo %time%') do (
set Finish_hh=%%a
set Finish_mm=%%b
set Finish_ss=%%c
)
FOR /f "tokens=1-3 delims=: " %%a in ('time /t') do (set Finish_Meridan=%%c)
Goto Calculate_Time

:Calculate_Time
REM Calculate the difference in time between Start and Finish times
REM.

IF %Start_ss% GTR %Finish_ss% (
set /A Finish_ss=%Finish_ss%+60
set /A Finish_mm=%Finish_mm%-1
)
set /A Diff_ss=%Finish_ss%-%Start_ss%

IF %Start_mm% GTR %Finish_mm% (
set /A Finish_mm=%Finish_mm%+60
set /A Finish_hh=%Finish_hh%-1
)
set /A Diff_mm=%Finish_mm%-%Start_mm%

IF %Start_hh% GTR %Finish_hh% (
set /A Finish_hh=%Finish_hh%+24
set Finish_day=1
)
set /A Diff_hh=%Finish_hh%-%Start_hh%

REM The follow will adjust for negative time values.
REM.
REM if %Diff_hh% LSS 0 (set /A Diff_hh=%Diff_hh%+23)
REM if %Diff_mm% LSS 0 (set /A Diff_mm=%Diff_mm%+59)
REM if %Diff_ss% LSS 0 (set /A Diff_ss=%Diff_ss%+59)
REM The following will compensate for single digit results.
REM.
if %Diff_hh%==0 set Diff_hh=00
if %Diff_hh%==1 set Diff_hh=01
if %Diff_hh%==2 set Diff_hh=02
if %Diff_hh%==3 set Diff_hh=03
if %Diff_hh%==4 set Diff_hh=04
if %Diff_hh%==5 set Diff_hh=05
if %Diff_hh%==6 set Diff_hh=06
if %Diff_hh%==7 set Diff_hh=07
if %Diff_hh%==8 set Diff_hh=08
if %Diff_hh%==9 set Diff_hh=09
if %Diff_mm%==0 set Diff_mm=00
if %Diff_mm%==1 set Diff_mm=01
if %Diff_mm%==2 set Diff_mm=02
if %Diff_mm%==3 set Diff_mm=03
if %Diff_mm%==4 set Diff_mm=04
if %Diff_mm%==5 set Diff_mm=05
if %Diff_mm%==6 set Diff_mm=06
if %Diff_mm%==7 set Diff_mm=07
if %Diff_mm%==8 set Diff_mm=08
if %Diff_mm%==9 set Diff_mm=09
if %Diff_ss%==0 set Diff_ss=00
if %Diff_ss%==1 set Diff_ss=01
if %Diff_ss%==2 set Diff_ss=02
if %Diff_ss%==3 set Diff_ss=03
if %Diff_ss%==4 set Diff_ss=04
if %Diff_ss%==5 set Diff_ss=05
if %Diff_ss%==6 set Diff_ss=06
if %Diff_ss%==7 set Diff_ss=07
if %Diff_ss%==8 set Diff_ss=08
if %Diff_ss%==9 set Diff_ss=09
Goto Print_Time

:Print_Time
REM This will return the results to the user.
REM.
Set End_Time=%time%
Echo.
Echo The program started at: %Start_Time% %Start_Meridan%
Echo The program ended at : %End_Time% %Finish_Meridan%
Echo hh:mm:ss.mm
Echo.
Echo This is the amount of time elapsed from the
Echo start to the end of the program executing.
Echo.
Echo %Diff_hh%:%Diff_mm%:%Diff_ss%
Echo hh:mm:ss
Echo. Number of Days Elapsed: %Finish_day%

Goto Reset_Variables

:Reset_Variables

REM The following will reset the variables used by this program.
REM A.K.A. cleaning up.
set mm=
set yyyy=
set dd=
set thedate=
set xx=
set tt=
set FileDir=
set FileName=
set ext=
set OlderThan=
set Sub_Dir=
set Delete_Counter=
set Total_Files=
set FChecked_Counter=
set Force_Check=
set Force_Delete=
set Diff_hh=
set Diff_mm=
set Diff_ss=
set Start_hh=
set Start_mm=
set Start_ss=
set Start_Meridan=
set Finish_hh=
set Finish_mm=
set Finish_ss=
set Finish_Meridan=
set mm=
set hh=
set ss=
set Start_Time=
set End_Time=
set Finish_day=
Goto Exit


GOTO Exit

:PROCESSFILE
set temp=%1
set fyyyy=%temp:~6%

if /I %fyyyy% LSS 100 set fyyyy=20%fyyyy%
if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%

set fmm=%temp:~0,2%
set fdd=%temp:~3,2%

:: +*************************************+
:: | This is where the files are deleted |
:: | Change the DIR command to DEL to |
:: | delete. DIR is used for test. |
:: +*************************************+

if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (
rem Echo %yyyy%/%mm%/%dd% "- The selected file will be deleted.  F: " %fyyyy%/%fmm%/%fdd% %FileName% >> files.txt
echo %FileName% >> d:\deletelog%yyyy%-%mm%-%dd%.txt
del %FileName% >> d:\deletelog%yyyy%-%mm%-%dd%.txt
rem Dir %Force_Delete% "%FileName%"
Set /A Delete_Counter=%Delete_Counter%+1
Set /A Total_Files=%Total_Files%+1
Echo.
) Else (
rem Echo %yyyy%/%mm%/%dd% " - The selected file does not qualify for deletion. F: " %fyyyy%/%fmm%/%fdd% %FileName%  "%FileName%" >> files.txt
Set /A FChecked_Counter=%FChecked_Counter%+1
Set /A Total_Files=%Total_Files%+1
Echo.) 

set temp=
set fyyyy=
set fmm=
set fdd=

:EXIT

1
2017-09-18 13:55



OMG, en uzun süredir gördüğüm en uzun komutlardan biri olan tek bir komutla yapabileceğiniz bir şey yapıyor ;-) ServerFault bu tür bir yazı için bir ödül vermeli ... bu betik neredeyse hesaplamayı yapıyor. Birinin parmaklarını kullanarak +5 yüksek teknoloji görünüyor! - Jessica McKinnon


Burada planlanmış bir görevde kullanabileceğiniz bir Powershell betiği var. (Bunu ayrıca bu cevap IIS günlük dosyalarını temizlerken).

set-location [enter-path-to-folder]
foreach ($File in get-childitem) {
   if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
      del $File
   }
}

Hedefinize giden klasör yolunu değiştirin, uygun şekilde AddDays'i değiştirin. -30, 30 günden eski şeyleri kaldırır.


1
2017-09-18 14:02