PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateien automatisch löschen (Script) Bitte um Hilfe


defleppard78
2013-02-08, 11:12:25
Hi zusammen,

ich habe folgendes Problem und bitte um Hilfe:

Ich möchte in Windows automatisch bestimmte Dateien löschen und suche dazu einen Befehl/Script.

Es sollen in einem bestimmten Verzeichnis Dateien mit bestimmten Endungen und älter als X Tage gelöscht werden.

In dem Verzeichnis gibt es Unterverzeichnisse die davon ebenfalls betroffen sein sollen. Ebenso gibt es ein Unterverzeichnis welches vom Löschen ausgeschlossen werden soll.

Ich hoffe jemand hat zu diesem Problem eine Lösung.

Mir forfiles/robocopy habe ich das Problem dass ich keine Unterverzeichnisse ausschließen kann.

Danke.

FOE
2013-02-08, 12:20:27
Hallo,

Schau Dir ev. mal "Take Command" ( http://jpsoft.com/ ) an, dass kann auch in der Freeware-Version schon viel mehr als CMD/DOS.

Was das "Ausschließen" betrifft, so kann man da ev. auch mit dem Attribut "Hidden" gut arbeiten.

D.h. vorher den Ordner auf "Hidden" setzen, dann die Dateien löschen und nachher wieder das Attribut entfernen.

Ich habe so z.B. eine Batch für "Torchlight 2" kreiert, welche das Datum der PAK-Mods aktualisiert, außer der Haupt-Datei - die Mod-Dateien müssen da nämlich eine jüngeres Datum haben als die Haupt-Datei, sonst werden die nicht geladen.

Mr. Lolman
2013-02-08, 18:18:58
Dieses batch löscht Dateien die ein Datum kleiner gleich dem angegebenen Parameter haben. Sofern man im Pfadparameter keine Leerzeichen drinnen hat, sollte das Ding auch funktionieren. Zumindest ists mal eine Basis für ein Batchscript, was genau das macht, was der TI will. ;)


@echo off & setlocal enableDelayedExpansion
if "%1%" == "" goto exp
if "%2%" == "" goto exp
if "%3%" == "" goto exp
if "%4%" == "" goto exp
if "%4%" == "J" goto del


goto start

:exp
echo Syntax LOLLILOESCH.CMD Parameter1 Parameter2 Parameter3 Parameter4 [Parameter5]
echo.
echo Parameter1: Pfad (ohne Backslash am Ende)
echo Parameter2: Dateinamenserweiterung
echo Parameter3: Datum (dd.mm.yyyy)
echo Parameter4: ohne Rückfrage löschen (J/N)
echo Parameter5: auszuschliessendes unterverzeichnis -- optional
echo.
echo.
echo Beispiel: LOLLILOESCH.CMD c:\windows tmp 21.01.2012 N system
goto exit

:start

set u=%1%
set w=\%5%\
set x=%u%\*.%2%
set z=%3%
set /a z=%z:~6,4%%z:~3,2%%z:~0,2%

echo Folgende Dateien werden geloescht:
echo.

for /f "delims=@" %%i in ('dir /s /b "%x%"') DO (

set y=%%~ti
set v=%%~dpi
set v=!v:%u%=!
set t=!v:%w%=!

set /a dat=!y:~6,4!!y:~3,2!!y:~0,2!
set del=false

if "!v!" NEQ "!t!" (if %w% == "\\" set del=true) else (set del=true)
if "!del!" EQU "true" if !dat! LEQ %z% echo !y! %%i
)

echo.
echo Taste druecken um diese Dateien zu loeschen, Strg+C zum abbrechen &pause>nul

:del
for /f "delims=@" %%i in ('dir /s /b "%x%"') DO (

set y=%%~ti
set v=%%~dpi
set v=!v:%u%=!
set t=!v:%w%=!

set /a dat=!y:~6,4!!y:~3,2!!y:~0,2!
set del=false

if "!v!" NEQ "!t!" (if %w% == "\\" set del=true) else (set del=true)
if "!del!" EQU "true" if !dat! LEQ %z% del %%i
)


:exit
pause


Ohne Gewähr ;)

Gast
2013-02-09, 00:03:10
find /pfad/zum/verzeichnis/ -type f -iname "*.bla" -mtime +10 -print -delete
Löscht alles was älter als 10 Tage ist.

Ausschließen kannst du durch hinzufügen weiterer bedingungen (-and -not -iname 'blubb*').

yahho
2013-02-09, 09:35:02
Ich werf mal noch ein Powershellscript ein.

$path="c:\was auch immer"

#ein paar Beispiele, den Zeitraum zu definieren
$2MinutenAlt=(Get-Date).AddMinutes(-2)
$1TagAlt = (Get-Date).AddDays(-1)
$6MonateAlt=(Get-Date).AddMonths(-6)
$3JahreAlt=(Get-Date).AddYears(-3)

$DateiAlter=$3JahreAlt # Zuweisung, die benutzt wird

#Ab hier nichts mehr ändern
Foreach ($item in (dir –recurse $path))
{
If (!( $item.PSIsContainer))
{
If ($item.LastWriteTime –lt $DateiAlter)
{
Write-output "$($item.FullName), $($item.LastWriteTime), $($item.Length)"
}
}
}

Statt $item.LastWriteTime geht auch $item.LastAccessTime für den letzten lesenden Zugriff.
Lehrzeichen im Pfad sind kein Problem und Unterverzeichnisse werden eingeschlossen.

sei laut
2013-02-09, 13:09:42
find /pfad/zum/verzeichnis/ -type f -iname "*.bla" -mtime +10 -print -delete
Löscht alles was älter als 10 Tage ist.

Ausschließen kannst du durch hinzufügen weiterer bedingungen (-and -not -iname 'blubb*').
Wenn du den Befehl unter Windows zum ausführen bringst, bin ich beeindruckt. ;D (ohne cygwin)

Trap
2013-02-09, 13:15:24
Wenn du den Befehl unter Windows zum ausführen bringst, bin ich beeindruckt. ;D (ohne cygwin)
Linux-VM und Zugriff über Netzlaufwerk? :p

Es gibt find auch ohne cygwin: http://gnuwin32.sourceforge.net/packages/findutils.htm

jorge42
2013-02-09, 14:20:20
Edit: ok das mit dem ausschließen nicht gesehen
Mit dem Windows eigenem "forfiles" ist das ein Einzeiler
forfiles /s /m *.* /d -10 /c "cmd /c del @file"
Hier weiter Infos
http://technet.microsoft.com/de-de/library/cc753551(v=ws.10).aspx