2016-06-29 3 views
0

Ich habe Ordner wie diese 201601,201501,201602,201603 benannt, im Grunde JJJJMM als Ordnername.Batch-Skript, um ältere Ordner mit JJJJMM als Ordnername zu löschen

für Monat heute Anbetracht der Ordner sein 201606. Ich brauche alle Ordner zu löschen, davon 6 Monate älter als 201606.

Auch ich will nicht die Ordner durch das geänderte Datum löschen, sondern durch Überprüfen Sie Monat und Jahr im Ordnernamen und vergleichen Sie sie mit dem Ordner und Jahr des aktuellen Monats und löschen Sie, wenn der Ordner älter als 6 Monate ist.

+1

"_I Notwendigkeit, alle Ordner zu löschen, davon 6 Monate älter als 201606_" lange Zeit, bis das passiert :) – davidkonrad

Antwort

1

Hier ist ein Weg, um es in Batch zu tun:

echo off 

SET rootdir=C:\Temp 
SET yyyy=%date:~10,4% 
SET cmm=%date:~4,2% 

::calculate name of folder 6 months ago based on current month: 
if %cmm%==01 (SET /a yyyy=%yyyy%-1 && SET mm=07) 
if %cmm%==02 (SET /a yyyy=%yyyy%-1 && SET mm=08) 
if %cmm%==03 (SET /a yyyy=%yyyy%-1 && SET mm=09) 
if %cmm%==04 (SET /a yyyy=%yyyy%-1 && SET mm=10) 
if %cmm%==05 (SET /a yyyy=%yyyy%-1 && SET mm=11) 
if %cmm%==06 (SET /a yyyy=%yyyy%-1 && SET mm=12) 
if %cmm%==07 (SET mm=01) 
if %cmm%==08 (SET mm=02) 
if %cmm%==09 (SET mm=03) 
if %cmm%==10 (SET mm=04) 
if %cmm%==11 (SET mm=05) 
if %cmm%==12 (SET mm=06) 

::move to target directory: 
pushd %rootdir% 

::remove old folders: 
for /D %%a in (*) do (
    if %%a LSS %yyyy%%mm% (rmdir /s /q %%a) 
) 
::return to current directory (optional): 
popd 

Aber es ist viel einfacher, in Powershell:

$rootdir = "C:\Temp\" 
$yyyymm = get-date -Date (get-date).AddMonths(-6) -Format "yyyyMM" 
Get-ChildItem $rootdir -Directory | Where-Object {$_.Name -lt $yyyymm} | Remove-Item 
Verwandte Themen