Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Batch soll Verzeichnisse und Dateien löschen die älter als 3 Tage UND leer sind

Mitglied: diekoenigs

diekoenigs (Level 1) - Jetzt verbinden

25.11.2008, aktualisiert 26.11.2008, 5002 Aufrufe, 8 Kommentare

Hallo Helferlein.

Ich möchte auf unserem Server gern einen Job laufen lassen,
welcher mir die Arbeit erleichtert. Dafür ist sowas ja da.
Und zwar, wie im Titel beschrieben:

Dateien und Ordner sollen gelöscht werden wenn
- sie leer nicht
UND
- älter als 3 Tage sind

Ich möchte keine exe verwenden!!!
Nur BATCH oder VBS.

Bitte helft..

Vielen Dank!

Gruß
Alex
Mitglied: napperman
25.11.2008 um 16:23 Uhr
Du willst zwar keine exe verwenden, aber delage32 ist dafür echt praktisch.
Bitte warten ..
Mitglied: diekoenigs
25.11.2008 um 17:50 Uhr
Okok.. wenn Du meinst.

Dann aber bitte mit nem Screenshot.
Denn mein "Vorgänger" meinte in einer Mail, er hätte es damit schon versucht. :D

Gruß
Alex
Bitte warten ..
Mitglied: Ren
25.11.2008 um 18:11 Uhr
hm... Mit Datum in einer Batch rechen ist eklig. Angeblich geht das mit VBS ganz einfach, damit kenne ich mich aber nicht aus. Hier hättest du schon mal alle Verzeichnisse, die leer sind, und das Datum dazu auch, bezogen auf das Verzeichnis, aus dem die Batch gestartet wurde, ohne Unterverzeichnisse.
01.
@echo off & setlocal 
02.
 
03.
FOR /F %%i IN ('dir /aD /b ') DO call :checkIfEmpty "%%i" 
04.
goto :eof 
05.
 
06.
:checkIfEmpty 
07.
::Wenn es kein Verzeichns ist, ist doof 
08.
if not exist "%~1\*.*" goto :eof 
09.
if exist "%~1\*.*" dir /a-D "%~1\*.*" >nul 2>nul 
10.
if "%errorlevel%"=="1" echo "%~1" ist leer! 
11.
if "%errorlevel%"=="0" goto :eof 
12.
::mal nachgucken, wie alt das Verzeichnis ist... 
13.
set dirDate=%~t1 
14.
echo Das Verzeichnis ist vom %dirDate%. 
15.
goto :eof
Bitte warten ..
Mitglied: Ren
25.11.2008 um 18:23 Uhr
Und hier wären dann die leeren Dateien:
01.
FOR /F %%i IN ('dir /a-D /b ') DO call :checkIfEmpty1 "%%i" 
02.
:checkIfEmpty1 
03.
::Wenn es ein Verzeichns ist, ist doof 
04.
if exist "%~1\*.*" goto :eof 
05.
::mal nachgucken, wie alt die Datei ist... 
06.
set fileDate=%~t1 
07.
set fileSize=%~z1 
08.
if not "%fileSize%"=="0" goto :eof 
09.
echo Die Datei "%~1"" ist vom %dirDate% und leer. 
10.
goto :eof
Bitte warten ..
Mitglied: bastla
25.11.2008 um 19:52 Uhr
@Ren
Angeblich geht das mit VBS ganz einfach
Kannst Du ja selbst beurteilen:
01.
@echo off & setlocal 
02.
set TDiff=-1 
03.
set g=%Temp%\Gestern.vbs 
04.
>%g% echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Left(g,2),Mid(g,4,2),Right(g,4) 
05.
for /f "tokens=1-3" %%i in ('cscript //nologo %g%') do set "Gestern=%%i.%%j.%%k" 
06.
del %g% 
07.
echo %Gestern%
Anstelle von "-1" für "gestern" die gewünschte Tagedifferenz in %TDiff% festlegen.

Um in einem Batch vergleichen zu können, wird wohl die Umwandlung beider Datumswerte in das Format "JJJJMMTT" am sinnvollsten sein (dann hast Du de facto "Zahlen") - daher auch das Script in der Fassung mit der Lizenz zum "Datum selber bauen" (Tag, Monat und Jahr werden getrennt zurückgegeben) ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
25.11.2008 um 21:53 Uhr
Na, dann will ich mich auch nicht lumpen lassen.

Mein Ansatz:
1) Wenn es so ein Sahnetool wie Horst Schaffers DelAge32 gibt, kann es keinen vernünftigen Grund geben, diese Funktionalität mit ein paar VBSkript/Batchzeilen neu erfinden zu wollen.

2) Um irgendwelche quengeligen Ich-will-aber-Anwender zufrieden (oder zumindest ruhig) zu stellen, würde ich den VBSkript-Oneliner so gestalten (Demo am CMD-Prompt): Zeile für Zeile Copy & Pasten as is.
%temp%\isolder.vbs anlegen
01.
set g=%Temp%\IsOlder.vbs 
02.
>%g% echo wscript.echo wscript.quit (1+(DateDiff("d",wscript.arguments(0),date) ^> int(wscript.arguments(1))))
Proof-of-Concept: welche Dateien t*.txt sind älter als (beispielsweise) 80 Tage:
Zeilen mit ">" beginnend sind die Test-Befehle, der Rest ist Ausgabe.
01.
>for %i in (t*.txt) do @cscript //nologo %g% "%~ti" 80 && echo "%~ti"  älter als 80 Tage: %i 
02.
"23.01.07 10:52"  älter als 80 Tage: target4.txt 
03.
"24.10.06 19:12"  älter als 80 Tage: teltarif_2006-10-02_171541.txt 
04.
"24.01.07 00:00"  älter als 80 Tage: test37.txt 
05.
"20.02.08 12:24"  älter als 80 Tage: test97.txt 
06.
"20.02.08 12:24"  älter als 80 Tage: test98.txt 
07.
"20.02.08 12:24"  älter als 80 Tage: test99.txt 
08.
"26.02.08 20:57"  älter als 80 Tage: testout.txt 
09.
"08.05.08 10:32"  älter als 80 Tage: testrar.txt 
10.
"04.06.08 18:26"  älter als 80 Tage: testset.txt 
11.
"07.07.08 12:04"  älter als 80 Tage: text.txt 
12.
"30.10.07 19:23"  älter als 80 Tage: tmp2.txt 
13.
 
14.
(=21:37:31  D:\temp=) 
15.
>for %i in (t*.txt) do @cscript //nologo %g% "%~ti" 80 || echo "%~ti"  nicht älter als 80 Tage: %i 
16.
"15.09.08 17:45"  nicht älter als 80 Tage: text27.txt 
17.
"20.11.08 12:45"  nicht älter als 80 Tage: tmp3.txt
Gefühlter Vorteil meiner Variante:
  • Ich übergebe den Wert "Differenz in Tagen" als Parameter, habe also -falls ich die ISOlder.vbs Nicht als Temp-Datei, sondern als Utility dauerhaft nutzen wollte, ein Mindestmaß an Flexibilität
  • Da ich nur True/False bzw Errorlevel 0 oder 1 zurückgebe, brauche ich nicht mit dem blöden Datum rumrechnen im Batch

In Kauf genommene Nachteile:
  • ist kryptisch und fast unwartbar
  • und, da keine Ausgabe des Datums oder auch nur der Datumsdifferenz erfolgt, muss man/frau das Funktionieren dieses Schnipsels entweder vorher ausgiebig testen.... oder halt glauben...
  • es ist natürlich Dönekens, für 1000 Dateien 1000x vom Batch aus eine Zeile VBS aufzurufen. Es sollte komplett in einem VBS-Schnipsel abgefackel werden.
  • größter Nachteil: es ist - verglichen mit DelAge32 natürlich so langsam wie ein Scharping spricht.

Aber damit wir hier endlich einen Haken an das Thema bekommen...

Grüße
Biber
Bitte warten ..
Mitglied: diekoenigs
26.11.2008 um 09:01 Uhr
Hallo. Vielen Danke für die Antworten.

Für mich als VBS Neuling.. muss ich nun die beiden Scripte zusammenschnipseln?

01.
@echo off & setlocal 
02.
set TDiff=-1 
03.
set g=%Temp%\Gestern.vbs 
04.
>%g% echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Left(g,2),Mid(g,4,2),Right(g,4) 
05.
for /f "tokens=1-3" %%i in ('cscript //nologo %g%') do set "Gestern=%%i.%%j.%%k" 
06.
del %g% 
07.
echo %Gestern%
und dann

01.
FOR /F %%i IN ('dir /a-D /b ') DO call :checkIfEmpty1 "%%i" 
02.
:checkIfEmpty1 
03.
::Wenn es ein Verzeichns ist, ist doof 
04.
if exist "%~1\*.*" goto :eof 
05.
::mal nachgucken, wie alt die Datei ist... 
06.
set fileDate=%~t1 
07.
set fileSize=%~z1 
08.
if not "%fileSize%"=="0" goto :eof 
09.
echo Die Datei "%~1"" ist vom %dirDate% und leer. 
10.
goto :eof
Ist das so korrekt?
Bitte warten ..
Mitglied: diekoenigs
26.11.2008 um 09:26 Uhr
Ich denk es hat sich erledigt.

Es sollen nun doch IMMER alles Ordner gelöscht werden, wenn sie älter als 3 Tage sind.
Somit habe ich nun ein Scribt.

Danke für die Hilfe.

Gruß
Alex
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch die alle Dateien löscht die Älter als 3 Tage sind

gelöst Frage von AzubineBatch & Shell5 Kommentare

Guten Morgen, von unserer Zeiterfassung werden die Sicherungsdateien in einem Ordner abgelegt und mit Veritas auf ein externes Bandlaufwerk ...

Batch & Shell

Alte Verzeichnisse löschen via Batch

gelöst Frage von synapsenstauBatch & Shell2 Kommentare

Ich habe einen TMP Ordner, in dem Ordner, die älter als 2 Wochen, gelöscht werden sollen. Die Batch soll ...

Windows 7

Dateien älter wie 3 Tage automatisch verschieben

gelöst Frage von WindowsUser1Windows 723 Kommentare

Tag zusammen, ich bin der totale Laie, was das angeht. Ich habe ein Verzeichnis C:\Users\User1\Documents Darin kommen automatisch täglich ...

Batch & Shell

Leere Verzeichnisse mit mehreren Unterordnern löschen?

gelöst Frage von Druide83Batch & Shell4 Kommentare

Morgen zusammen, wie im Titel schon beschrieben, möchte ich ein Verzeichnis nach leeren Verzeichnissen durchsuchen lassen und diese sollen ...

Neue Wissensbeiträge
Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 7 StundenSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 13 StundenWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 17 StundeniOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 2 TagenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell: Im AD nach Rechnern mit bestimmten IP-Adressen suchen
gelöst Frage von Raven42Batch & Shell36 Kommentare

Hallo zusammen, ich suche nach einer Möglichkeit nach Computern im AD zu suchen , deren IP-Adresse mit 10.11.12. beginnt. ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++34 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless25 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

Windows Server
Alten DC entfernen
Frage von smartinoWindows Server24 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...