theuncle
Goto Top

Löschen von Dateien zwischen zwei Uhrzeiten per Batch (XP, Server 2003)

Benötige Batchdatei zum Löschen von Dateien in einem bestimmten Zeitraum (eines Tages). (XP, Server 2003)

Ola Leutz,

Vorgeschichte:
Wir fummeln seit Jahren an einem Batchpaket für unsere Server herum, welche wir bereits geraume Zeit für die unterschiedlichsten Zwecke einsetzen. Fast alles, was wir für eine schnelle Administration bzw. Sonderwünsche benötigen, ist bereits erstellt, welches nicht zuletzt auch Euch zu verdanken ist (Gruss an den Biber).
Man kann sich ja fast alles aus dem Forum holen, was man braucht. Nun hat ein Techniker letztens noch ein paar schöne Ideen gehabt und dafür brauche ich u.a. eine speziell umgesetzte Funktion in einer Batch mit Standardbefehlen.

Bisher nicht in der Form gefunden oder von mir zu schlecht kombiniert, i.e. nicht lauffähig ist folgende Problemstellung:

Löschen von Dateien in einem Verzeichnis (alternativ rekursiv mit Unterverzeichnissen) ZWISCHEN zwei anzugebenden UHRzeiten (Dateien sind zumeist alle von einem Tag).
Die Uhrzeiten können evtl. per SET (in der Batch) oder Parameter (%1, %2) in die Batch einfliessen.

Ihr würdet uns, wie immer, sehr helfen ... vielen Dank im voraus.

MfG theuncle face-smile

Content-ID: 154489

Url: https://administrator.de/contentid/154489

Ausgedruckt am: 06.11.2024 um 01:11 Uhr

bastla
bastla 06.11.2010 um 17:58:02 Uhr
Goto Top
Hallo theuncle!

Ja nach dem von Euch verwendeten Datums-/Zeitformat sind ev Anpassungen erforderlich, aber als Test an der Kommandozeile könnte das schematisch etwa so gehen:
for %i in ("D:\Das Verzeichnis\*.*") do @for /f "tokens=2" %a in ("%~ti") do @if "%a" geq "07:00" @if "%a" leq "12:00" @echo %a --^> "%i" wird geloescht
Hier würden ohne Berücksichtigung des Datums alle zwischen (inklusive) "07:00" und "12:00" (die Grenzen können/sollten natürlich als Variable angegeben werden) zuletzt geänderten Dateien erfasst.

Rekursiv wird's bei Bedarf mit "for /r" ...

Grüße
bastla
90776
90776 06.11.2010 um 18:03:04 Uhr
Goto Top
Hallo

nach Bastla noch den reinen Zeitcode

@echo off

echo.
echo Format muss 00:00 sein!
echo.

set /p time1=Bitte Erste  Zeit eingeben (von): 
set /p time2=Bitte Zweite Zeit eingeben (bis): 

if %time1% LSS 00:00 goto Fehler
if %time2% LSS 00:00 goto Fehler
if %time1% GTR 23:59 goto Fehler
if %time2% GTR 23:59 goto Fehler
if not %time1:~2,1% EQU : goto Fehler
if not %time2:~2,1% EQU : goto Fehler
if not DEFINED time1 goto Fehler
if not DEFINED time2 goto Fehler

 if %time:~0,2%:%time:~3,2% GEQ %time1% if %time:~0,2%:%time:~3,2% LEQ %time2% (
  goto Process
   ) else (
    Goto Fehler
   )

:Fehler
echo FEHLER
pause
exit

:Process
echo OK
pause

einfach unter Process die gewünschten Befehle einfügen
theuncle
theuncle 08.11.2010 um 18:27:38 Uhr
Goto Top
Hallo Bastla, hallo switcher94,

erst einmal vielen herzlichen Dank für die wahnsinnig schnell zur Verfügung gestellte Lösung. Bin noch nicht wirklich zum Ausprobieren gekommen.

Werde mich höchstwahrscheinlich morgen dran setzen und den Code in unsere Batch integrieren. Gebe Euch natürlich noch ne Rückmeldung. Wollte mich nur schon einmal zwischendurch melden, um mich zu bedanken...

CU Theuncle face-smile
theuncle
theuncle 17.11.2010 um 11:08:27 Uhr
Goto Top
Hallo Bastla,

ich bin nun endlich zum Ausprobieren Deines Scripts/ Befehls gekommen. Entweder habe ich noch einen Schreibfehler drin oder habe die Syntax nicht kapiert.
Ob mit oder ohne aktivierte Befehls-Erweiterung (setlocal EnableDelayedExpansion) erscheint bei Ausführung folgende Fehlermeldung.
Info: e:\Test\ ist mein Proof-Ordner. Ich möchte es zum Testen in Windows XP Prof. in der Eingabeaufforderung nutzen. Die Fehlerausgabe ist tatsächlich abgeschnitten, i.e. fängt mit "\test .... an.

"\test\*.*") do @for /f "tokens" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Der Befehl ist fast identisch von o. übernommen und sieht so aus:

for %i in ("e:\test\*.*") do @for /f "tokens=2" %a in ("%~ti") do @if "%a" geq "07:00" @if "%a" leq "16:00" @echo %a --^> "%i" wird geloescht

Klar ist auch, dass ich bei einwandfreier Auflistung der gewünschten Dateien den Echo-Abschnitt durch meine Lösch-Befehle ersetze face-smile)))))))
Evtl. findet das geübtere Auge ja schnell den Fehler.

Vielen Dank schon einmal im voraus

The Uncle
bastla
bastla 17.11.2010 um 13:25:36 Uhr
Goto Top
Hallo theuncle!

Falls Du den Oneliner als Batch verwenden willst, musst Du alle Prozentzeichen bei "%a" und "%i" (auch für "%~ti" wäre das dann "%%~ti") verdoppeln - direkt in der CMD-Shell eingegeben (und nur mit an mein System angepasstem Pfad von "e:\test\*.*") funktioniert Deine Zeile bei mir wie gewünscht ...

Grüße
bastla
theuncle
theuncle 17.11.2010 um 17:46:16 Uhr
Goto Top
Hallo Bastla,

wir nennen es ein Schicht 8 Problem. Oh oh, das darf hier auch kein anderer von unserem Team lesen ... *schäm.
Es läuft alles perfekt. Vielen Dank für alles ....

*klick auf gelöst ....

Cu the uncle face-smile