Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Lösche Verzeichniss per script

Frage Entwicklung

Mitglied: zero1de

zero1de (Level 1) - Jetzt verbinden

10.09.2013 um 12:11 Uhr, 1401 Aufrufe, 20 Kommentare

Hallo,

ich brauche einen Script (egal VBS, powershell oder c#) der Verzeichnisse durchsucht und bei bedarf löschen und protokolliert.
Ich habe folgende Struktur:

D:\xxx\xx_207\archiv\20091227
unter d:\xxx\ werden immer neue Verzeichnisse mit xx_208, xx_209 usw.. angelegt die sollen nicht gelöscht werden auch der Unterordner "Archiv" soll nicht gelöscht werden. Gelöscht wird nur der Ordner 20091227 oder 20091228, 20091229 aber auch nur dann, wenn mehr als 5 Ordner drin sind. Dann sollen natürlich nur die ältesten gelöscht werden, bis die letzte 5 Ordner bleiben.

Bei diesem Bespiel hier, soll nur die Unterordner 20091226, 20091227 gelöscht werden da im Verzeichnis D:\xxx\xx_207\archiv\ mehr als 5 Unterordner vorhanden sind. Rest bleibt. Das selbe gilt dann auch für andere Archive

D:\xxx\xx_207\archiv\20091221
D:\xxx\xx_207\archiv\20091222
D:\xxx\xx_207\archiv\20091223
D:\xxx\xx_207\archiv\20091224
D:\xxx\xx_207\archiv\20091225
D:\xxx\xx_207\archiv\20091226
D:\xxx\xx_207\archiv\20091227

Kann mir jemand helfen?
THX im Vorraus

Mitglied: Lochkartenstanzer
10.09.2013, aktualisiert um 13:41 Uhr
Moin

so als schnellschuß:

#/bin/bash 
 
ls -d "D:\\xxx\\xx_207\\archiv\\*" | tail -$(expr $(ls -d "D:\\xxx\\xx_207\\archiv\\*"  | wc -l) - 5) | xargs rm -v 


lks

EDIT:

Die Idee dahinter, falls Du das nachprogrammieren willst:

  • Ein dirlisting in D:\xxx\xx_207\archiv\* gibt die die verzeichnisse dort wider.
  • ein wc zähl die Zeilen und zieht 5 davon ab.
  • das tail schneidet de ersten 5 zeilen davon ab
  • und das was herausfällt sind die verzeichnisnamen, die gelöscht werden können. (heead statt tail läßt die letzten 5 statt der ersten 5 verzeichnisse stehen).
Bitte warten ..
Mitglied: Snowman25
10.09.2013, aktualisiert um 13:30 Uhr
Ich glaube, der TS braucht zumindest eine Windows-Lösung
(auch, wenn er das nicht spezifiert hat )
Bitte warten ..
Mitglied: Lochkartenstanzer
10.09.2013, aktualisiert um 13:32 Uhr
Zitat von Snowman25:
Ich glaube, der TS braucht zumindest eine Windows-Lösung
(auch, wenn er das nicht spezifiert hat )

Der TO sagte

> ich brauche einen Script (egal VBS, powershell oder c# ...

Und die Bash gibt es auch unter windows. entweder standalone oder mit cygwin.

lks
Bitte warten ..
Mitglied: Snowman25
10.09.2013 um 13:32 Uhr
Zitat von Lochkartenstanzer:
Und die Bash gibt es auch unter windows. entweder standalone oder mit cygwin.
Wenn auch umständlich, aber recht hast du.
Bitte warten ..
Mitglied: Lochkartenstanzer
10.09.2013 um 13:35 Uhr
Zitat von Snowman25:
> Zitat von Lochkartenstanzer:
> ----
> Und die Bash gibt es auch unter windows. entweder standalone oder mit cygwin.
Wenn auch umständlich, aber recht hast du.

Wieso umständlich. Ich habe auf den "wichtigen" Windowskisten immer ein cygwin mit drauf. Das ist kaum Mehraufwand, das mitzuinstallieren und die Einzeiler sind schneller "hingerotzt" als erst ein powershell oder cmd-batch zu schreiben.

lks
Bitte warten ..
Mitglied: bastla
10.09.2013, aktualisiert um 19:13 Uhr
@ lks
Einen Batch braucht das auch nicht - direkt in CMD etwa so:
for /d %i in ("D:\xxx\xx_*") do @for /f "skip=5" %a in ('dir /b/o-n/ad "%i\archiv"') do @echo rd "%i\archiv\%a"
Ist etwas länger geworden, weil ja nicht nur der Ordner "D:\xxx\xx_207" behandelt werden soll (und auch noch ein "Sicherheits-echo" zum Testen drin ist) ...

Grüße
bastla
Bitte warten ..
Mitglied: Lochkartenstanzer
10.09.2013 um 20:24 Uhr
Zitat von bastla:
@ lks
Einen Batch braucht das auch nicht - direkt in CMD etwa so:


bash kann ich halt besser als cmd

lks
Bitte warten ..
Mitglied: zero1de
11.09.2013 um 15:47 Uhr
Danke nowman25 du kannst pro Aktive denken. Übrigen ich brauche eine vbs oder powershell script und keine Sprüche Leute
Bitte warten ..
Mitglied: zero1de
11.09.2013 um 15:52 Uhr
Danke für die Mühe aber :

D:\dwh\pu_207\archiv\20091227 es wird nur im untersten Subfolder gelöscht. Die suche läuft ab
hier D:\dwh rekursive durch und löscht nur Subfolder die unter D:\dwh\pu_207\archiv\XXXXXXX drin sind und bei Count > 5 nur die ältesten Folder löschen.
Bitte warten ..
Mitglied: bastla
11.09.2013 um 18:16 Uhr
Hallo zero1de!
ich brauche eine vbs oder powershell script
Was spricht gegen CMD/Batch?

Grüße
bastla
Bitte warten ..
Mitglied: zero1de
12.09.2013 um 15:24 Uhr
Hi,

bekomme folgende Meldung mit deinem Batch:

D:\dwh>rd "D:\dwh\pu_212\archiv\20130902"
Das Verzeichnis ist nicht leer.
Bitte warten ..
Mitglied: zero1de
12.09.2013 um 15:52 Uhr
So würde es im cmd direkt laufen aber wie kann ich das als *.bat oder cmd ausführen und das Ergebnis mit Protokollieren ?

for /d \dwh\pu_*") do @for /f "skip=5" i\archiv"') do rmdir "a" /s /q
Bitte warten ..
Mitglied: bastla
12.09.2013 um 19:18 Uhr
Hallo zero1de!

In einem Batch ist "%i" durch "%%i" zu ersetzen.

Da "rd" keine Ausgabe erzeugt musst Du das zum Protokollieren selbst erledigen - am Beispiel meines Ansatzes oben etwa so:
for /d %%i in ("\dwh\pu_*") do for /f "skip=5" %%a in ('dir /b/o-n/ad "%%i\archiv"') do rd /s /q "%%i\archiv\%%a">nul && >>Log.txt echo "%%i\archiv\%%a" geloescht || >>Log.txt echo "%%i\archiv\%%a" nicht geloescht
Grüße
bastla
Bitte warten ..
Mitglied: Biber
12.09.2013, aktualisiert 13.09.2013
Moin bastla,

ich weiss ja nicht....
Klar, das ist genau das, was dieser zero-Frager sich gewünscht hat.
Außer, dass es jetzt doch ein CMD-Batch ist.

Aber so ein Logfile macht doch überhaupt keinen Sinn.

Wenn die Mimik gewesen wäre:
  • alle Archiv-Verzeichnisse von 2009 bis 2012 durchzuwackeln
  • und alles auf ein externes Medium zu sichern
  • und danach alles Gesicherte in einem Archiv-Verzeichnis zu löschen (oder alles bis auf die jüngsten 5)
  • und den ganzen Prozess in eine Logdatei zu drücken...

-> das hätte etwas.

Aber in einer Logdatei zu protokollieren "Ich habe Unterverzeichnisse xy in \20091218\ gelöscht...." ?
Was soll das bringen? Auch wenn du die Logdatei in Plexiglas vergilbungssicher konservierst - das hilft doch keinem im nächsten August, wenn einer diese Archive sucht.

Zumindest solltest du diesen unfreundlichen Komiker mal darauf hinweisen.
Mir würde dafür die Geduld fehlen.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
12.09.2013, aktualisiert 13.09.2013
Hallo Biber!
Zumindest solltest du diesen unfreundlichen Komiker mal darauf hinweisen.
Dem habe ich nix mehr hinzuzufügen.

Grüße
bastla
Bitte warten ..
Mitglied: zero1de
13.09.2013 um 09:06 Uhr
Die Logdatei soll als Kontrolle dienen, damit ich weiß welche Datei gelöscht wurden und wann.
Bitte warten ..
Mitglied: zero1de
13.09.2013 um 09:08 Uhr
Hi Bastla,

Irgendwie bekomme ich das nicht zum laufen > Syntaxfehler !!!.
Wie ich schon sagte, ich muss das Batch/Script Zeitgesteuert starten deshalb als cmd Datei.

Gruß
zero1de
Bitte warten ..
Mitglied: Biber
13.09.2013 um 16:10 Uhr
Zitat von zero1de:
Die Logdatei soll als Kontrolle dienen, damit ich weiß welche Datei gelöscht wurden und wann.
Wenn du sehen können willst, WANN eine Datei gelöscht wurde, dann solltest du vielleicht noch %date% und %time% mit in die Logdatei schreiben.
Sonst siehst du nur, DASS gelöscht wurde.

Zitat von zero1de:
Wie ich schon sagte, ich muss das Batch/Script Zeitgesteuert starten deshalb als cmd Datei.
Wie "Wie ich schon sagte..." ????
Mag sein, dass du es gesagt hast, aber das hört doch hier keiner.
Du musst es in deinen Beitragstext schreiben, sonst ahnt es niemand.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.09.2013 um 17:33 Uhr
Hallo zero1de!
Irgendwie bekomme ich das nicht zum laufen > Syntaxfehler !!!.
Irgendwie bekomme ich den Syntaxfehler nicht hin ...
D:\TEMP>tree D:\dwh 
Auflistung der Ordnerpfade für Volume TEMP 
Volumenummer: 1234-5678 
D:\DWH 
+---pu_207 
¦   +---archiv 
¦   ¦   +---20091223 
¦   ¦   +---20091224 
¦   ¦   +---20091225 
¦   ¦   +---20091226 
¦   ¦   +---20091227 
¦   ¦   +---20091221 
¦   ¦   +---20091222 
¦   ¦   +---20091228 
¦   ¦   +---20091229 
¦   +---tst 
+---pu_208 
    +---archiv 
        +---20100102 
        +---20100103 
        +---20100104 
        +---20100105 
        +---20100106 
        +---20100107 
        +---20100108 
 
D:\TEMP>type LoeschenBisAuf5.cmd 
for /d %%i in ("\dwh\pu_*") do for /f "skip=5" %%a in ('dir /b/o-n/ad "%%i\archiv"') do rd /s /q "%%i\archiv\%%a">nul && >>Log.txt echo "%%i\archiv\%%a" geloescht || >>Log.txt echo "%%i\archiv\%%a" nicht geloescht 
 
D:\TEMP>LoeschenBisAuf5.cmd 
 
D:\TEMP>for / %i in ("\dwh\pu_*") do for /F "skip=5" %a in ('dir /b/o-n/ad "%i\archiv"') do rd /s /q "%i\archiv\%a"  1>nul  && echo "%i\archiv\%a" geloescht  1>>Log.txt  || echo "%i\archiv\%a" nicht geloescht 1>>Log.txt 
 
D:\TEMP>for /F "skip=5" %a in ('dir /b/o-n/ad "\dwh\pu_207\archiv"') do rd /s /q "\dwh\pu_207\archiv\%a"  1>nul  && echo "\dwh\pu_207\archiv\%a" geloescht  1>>Log.txt  || echo "\dwh\pu_207\archiv\%a" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_207\archiv\20091224"  1>nul  && echo "\dwh\pu_207\archiv\20091224" geloescht  1>>Log.txt  || echo "\dwh\pu_207\archiv\20091224" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_207\archiv\20091223"  1>nul  && echo "\dwh\pu_207\archiv\20091223" geloescht  1>>Log.txt  || echo "\dwh\pu_207\archiv\20091223" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_207\archiv\20091222"  1>nul  && echo "\dwh\pu_207\archiv\20091222" geloescht  1>>Log.txt  || echo "\dwh\pu_207\archiv\20091222" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_207\archiv\20091221"  1>nul  && echo "\dwh\pu_207\archiv\20091221" geloescht  1>>Log.txt  || echo "\dwh\pu_207\archiv\20091221" nicht geloescht 1>>Log.txt 
 
D:\TEMP>for /F "skip=5" %a in ('dir /b/o-n/ad "\dwh\pu_208\archiv"') do rd /s /q "\dwh\pu_208\archiv\%a"  1>nul  && echo "\dwh\pu_208\archiv\%a" geloescht  1>>Log.txt  || echo "\dwh\pu_208\archiv\%a" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_208\archiv\20100103"  1>nul  && echo "\dwh\pu_208\archiv\20100103" geloescht  1>>Log.txt  || echo "\dwh\pu_208\archiv\20100103" nicht geloescht 1>>Log.txt 
 
D:\TEMP>rd /s /q "\dwh\pu_208\archiv\20100102"  1>nul  && echo "\dwh\pu_208\archiv\20100102" geloescht  1>>Log.txt  || echo "\dwh\pu_208\archiv\20100102" nicht geloescht 1>>Log.txt 
 
D:\TEMP>tree D:\dwh 
Auflistung der Ordnerpfade für Volume TEMP 
Volumenummer: 1234-5678 
D:\DWH 
+---pu_207 
¦   +---archiv 
¦   ¦   +---20091225 
¦   ¦   +---20091226 
¦   ¦   +---20091227 
¦   ¦   +---20091228 
¦   ¦   +---20091229 
¦   +---tst 
+---pu_208 
    +---archiv 
        +---20100104 
        +---20100105 
        +---20100106 
        +---20100107 
        +---20100108 
 
D:\TEMP>type Log.txt 
"\dwh\pu_207\archiv\20091224" geloescht 
"\dwh\pu_207\archiv\20091223" geloescht 
"\dwh\pu_207\archiv\20091222" geloescht 
"\dwh\pu_207\archiv\20091221" geloescht 
"\dwh\pu_208\archiv\20100103" geloescht 
"\dwh\pu_208\archiv\20100102" geloescht 
 
D:\TEMP>
Grüße
bastla
Bitte warten ..
Mitglied: zero1de
16.09.2013 um 10:37 Uhr
Hi Bastla,

vielen Dank für deine Mühe. Es funktioniert.

Thx
zero1de
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Batch & Shell
Script zum Auflösen einer Ordnerstruktur und zurück gesucht (12)

Frage von websolutions zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...