Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Löschvorgang automatisieren

Frage Entwicklung Batch & Shell

Mitglied: Franzmann

Franzmann (Level 1) - Jetzt verbinden

12.10.2006, aktualisiert 08.01.2015, 4057 Aufrufe, 12 Kommentare

Hallo alle zusammen,
hoffe jemand weiß wie ich folgendes Problem realisieren kann.
Ich hab unter Windows einen Ordner Versionen der bsp. die
Unterordner 1.1, 1.2, 1.3, 1.4, 1.5 beinhaltet.

436b96362e69b05493730f4f8c8ff96a-bild - Klicke auf das Bild, um es zu vergrößern

Wie kann ich realisieren das mir per Skript alle Unterordner außer dem Aktuellsten, in diesem Fall 1.5, gelöscht werden ? Die 5 Unterordner sind vom Ursprung alle gleich alt, so dass man nicht nach dem Erstellungsdatum gehen kann.
Hoffe die Problematik wurde klar...
Greetz
Mitglied: Biber
12.10.2006 um 14:53 Uhr
Moin Franzmann,

angenommen, der Parent-Ordner der "Versions-Verzeichnisse" 1.1; 1.2; .... 1.28g; .... 3.9a, 4.00;.. heißt D:\Versionen
und die Namenskonvention für die Versionsverzeichnisse sei "?.*" [eine Stelle vor dem Punkt, beliebige Stellen danach], dann:

Am Prompt:
01.
>for /f "skip=1" %i in ('dir /b /Ad /o-n D:\Versionen\?.*') do @ECHO rd /s /q %i
Das "@ECHO" nach dem erfolgreichen Testen ersatzlos löschen.
Als Batch jeweils zwei %-Zeichen statt ein %-Zeichen.

Gruß
Biber
Bitte warten ..
Mitglied: Franzmann
12.10.2006 um 15:22 Uhr
Hey Biber,
danke für deine Hilfe !
Also der Test mit @ECHO klappt wunderbar,
doch sobald ich das @ECHO wegnehme spuckt er folgendes aus:
C:\>for /f "skip=1" %i in ('dir /b /Ad /o-n D:\temp\?.*') do rd /s /q %i

C:\>rd /s /q 1.6
Das System kann die angegebene Datei nicht finden.

C:\>rd /s /q 1.5
Das System kann die angegebene Datei nicht finden.

C:\>rd /s /q 1.4
Das System kann die angegebene Datei nicht finden.

C:\>rd /s /q 1.3
Das System kann die angegebene Datei nicht finden.

C:\>rd /s /q 1.2
Das System kann die angegebene Datei nicht finden.

C:\>rd /s /q 1.1
Das System kann die angegebene Datei nicht finden.

Weißt du warum ?
mfg
Bitte warten ..
Mitglied: Biber
12.10.2006 um 15:41 Uhr
Jepp, Franzmann,

sorry, die Pfadangabe "D:\Versionen" (bei mir) bzw. "D:\temp" (bei Dir) muss natürlich auch beim RD-Befehl angegeben werden.

for /f "skip=1" %i in ('dir /b /Ad /o-n D:\temp\?.*') do rd /s /q D:\Temp\%i

Gruß
Biber
Bitte warten ..
Mitglied: Franzmann
12.10.2006 um 17:51 Uhr
Yoh aller erste Sahne... läuft wie sau !!!
Ich danke dir...
mfg
Bitte warten ..
Mitglied: bastla
12.10.2006 um 20:04 Uhr
@Biber

Wie würdest Du bei zusätzlichen (vor dem Punkt) zweistelligen Versionsnummern vorgehen - mit If Exist ??.* alle Einstelligen weg und dann wie gehabt?

Grüße
bastla
Bitte warten ..
Mitglied: Franzmann
13.10.2006 um 09:11 Uhr
Habe ein neues Bild geuploadet ! 436b96362e69b05493730f4f8c8ff96a-bild - Klicke auf das Bild, um es zu vergrößern
In diesen Ordnern die man auf dem Bild sieht, sind jeweils die einzelnen Versionsordner enthalten. Wenn ich die Batch da jeweils reinkopiere klappt das auch tadellos !
Nur will ich die halt nicht überall vorab reinkopieren, durchlaufen lassen und dann wieder löschen. Ich würde gerne einen Zusatz in die Batch schreiben und zwar eine allgemeine Pfadangabe mit der er sämtlich Ordner der reihe nach abarbeitet.
Problematisch wird es auch bei den unterschiedlichen Namen der Ordner, wie hier beispielhaft mit den Pfeilen markiert wurde. Wie muss sowas aussehen ?
mfg

Franzmann
Bitte warten ..
Mitglied: bastla
13.10.2006 um 10:01 Uhr
Hallo Franzmann!

Wenn der oben dargestellte Ordner "D:\Temp" heißt, werden durch die folgende Variante in allen darin befindlichen Ordnern mit 4-stelligen Bezeichnungen die entsprechenden Unterordner gelöscht:

01.
REM Nur zur Sicherheit in den richtigen Ordner wechseln ... 
02.
cd /d D:\Temp 
03.
for /f %a in ('dir /b /Ad ????') do for /f "skip=1" %i in ('dir /b /Ad /o-n %a\?.*') do @echo rd /s /q %a\%i
Soll keine Namenskonvention (nur 4-stellig) für die erste Ordnerebene ("A000", ..., "d0002", ...) berücksichtigt werden, so kannst Du "????" durch "*.*" ersetzen und damit alle Ordner in D:\Temp behandeln.

HTH
bastla
Bitte warten ..
Mitglied: Franzmann
13.10.2006 um 10:49 Uhr
Ja subba... auch das läuft prima !
Ich danke dir bzw. euch Beiden !!!
Die Batch hat mir meinen Zeitaufwand um mehr als 3/4 gekürzt dank euch...
Schönes Weekend !!!
Bis dahin...

Franzmann
Bitte warten ..
Mitglied: Biber
13.10.2006 um 13:01 Uhr
Hm, bastla,

ist kniffelig, weil ich beim DIR-Befehl mit "?"-Jokerzeichen das "Feature" habe, dass ein "?" ja bedeutet:
"Ein beliebiges Zeichen oder keins".
Sprich: wenn ich folgende Verzeichnis-Struktur hätte [alles VOR dem Punkt soll numerisch sein]
01.
d:\temp\test\1.1 
02.
d:\temp\test\1.2 
03.
d:\temp\test\1.3 
04.
d:\temp\test\1.4 
05.
d:\temp\test\1.5 
06.
d:\temp\test\9.4 
07.
d:\temp\test\10.1 
08.
d:\temp\test\10.2 
09.
d:\temp\test\10.2.3.4 
10.
d:\temp\test\10.5 
11.
d:\temp\test\10.7 
12.
d:\temp\test\10.7.1.3
[entspricht jetzt der Ausgabe von "dir /s /b d:\temp\test"]

--> dann würde ja die alphatische Sortierung des DIR-Befehls mit Wildcard "??" folgendes liefern:
[alle Beispiele am CMD-Prompt zur Demo]
01.
>dir /s /b /o-n d:\temp\test\??.* 
02.
d:\temp\test\9.4 
03.
d:\temp\test\10.7.1.3 
04.
d:\temp\test\10.7 
05.
d:\temp\test\10.5 
06.
d:\temp\test\10.2.3.4 
07.
d:\temp\test\10.2 
08.
d:\temp\test\10.1 
09.
d:\temp\test\1.5 
10.
d:\temp\test\1.4 
11.
d:\temp\test\1.3 
12.
d:\temp\test\1.2 
13.
d:\temp\test\1.1
Wenn also die Anforderung wäre, nur die höchsten n zweistelligen Version(en) zu löschen und auch einstellige "Versions-Verzwichnisse" vorhanden sein können, dann wäre die Mimik.

Fall a) Zweistellige sind vorhanden; alle einstelligen können deshalb ohnehin gelöscht werden:
Zuerst alle einstelligen Versionen löschen. Danach "zweistellige" behandeln:
01.
>for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.*') do @rd /s /q d:\temp\test\%i 
02.
>for /f "skip=1" %i in ('dir /b /Ad /o-n d:\temp\test\??.*') do @rd /s /q d:\temp\test\%i

Fall b) Nur zweistellige Verzeichnisse sollen behandelt werden; einstellige bleiben wie sie sind.

[Zwischenschritt zur Verdeutlichung]
01.
<b>>for /f "delims=. tokens=1,*" %i in ('dir /s /b /o-n d:\temp\test\??.*') do @if %~nxi GTR 9 @echo %i.%j</b> 
02.
d:\temp\test\10.7.1.3 
03.
d:\temp\test\10.7 
04.
d:\temp\test\10.5 
05.
d:\temp\test\10.2.3.4 
06.
d:\temp\test\10.2 
07.
d:\temp\test\10.1
Diesen Output lasse ich mal in einer "inneren" FOR /F-Anweisung erzeugen.
Denn ich will ja davon, von diesem Output, die (gemäß logischer Sortierung) erste Zeile überspringen.

01.
>for /f "skip=1" %x in ('<b>for /f "delims=. tokens=1,*" %i in ^('dir /s /b /o-n d:\temp\test\??.*'^) do @if %~nxi GTR 9 @echo %i.%j</b>') do @echo rd /s /q d:\temp\test\%x 
02.
rd d:\temp\test\d:\temp\test\10.7 
03.
rd d:\temp\test\d:\temp\test\10.5 
04.
rd d:\temp\test\d:\temp\test\10.2.3.4 
05.
rd d:\temp\test\d:\temp\test\10.2 
06.
rd d:\temp\test\d:\temp\test\10.1
Gruß
Biber
Bitte warten ..
Mitglied: bastla
13.10.2006 um 13:50 Uhr
Hallo Biber!

Was machst Du eigentlich mit dem d:\temp\test\x.* in

01.
for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.* d:\temp\test\x.*') do @rd /s /q d:\temp\test\%i
(und, ganz nebenbei, kann ich einen Teil eines "Schnipsels" beim Posten - innerhalb eines code-Blocks - mit einer Formatierung irgendwie hervorheben)?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
13.10.2006 um 14:42 Uhr
@bastla

Das hatte ich vergessen zu löschen.. war vom Testen am CMD-Prompt übriggebileben:
01.
for /f %i in ('dir /b /Ad /o-n d:\temp\test\?.* <b>d:\temp\test\??.*</b>') do @rd /s /q d:\temp\test\%i
.. so hatte ich probiert, was das Ergebnis wäre, wenn ich erst die Ein-, dann die zweistelligen "Versions"-Verzeichnisse abarbeite. Käme aber nur Müll raus.

Dann hatte ich das "??.*" durch "x.*" ersetzt und vergessen.
Ich lösche es oben raus.

Die Formatierung fett zum Beispiel klappt auch innerhalb der Formatierung "Code".

Gruß
Biber
Bitte warten ..
Mitglied: bastla
13.10.2006 um 14:46 Uhr
@Biber

Na, da bin ich ja beruhigt ...

... und danke für den Formatierungstipp - hatte ich wohl an unpassender Stelle probiert ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Filezilla automatisieren (13)

Frage von 132351 zum Thema Batch & Shell ...

Windows 10
Windows 10 Einrichtung Automatisieren (5)

Frage von Dallenstein zum Thema Windows 10 ...

Windows 10
gelöst Windows 10 Funktionsupdate komplett automatisieren (2)

Frage von tRIACTIs zum Thema Windows 10 ...

Windows Installation
Notebook und PC aufsetzen automatisieren Windows 7 und 10 (10)

Frage von xpxy15 zum Thema Windows Installation ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Server
Bilder aus dem Web mit CSV runterladen (30)

Frage von Yannosch zum Thema Server ...

LAN, WAN, Wireless
Gebäudeverkabelung 10Gigabit LWL (28)

Frage von raffzwo zum Thema LAN, WAN, Wireless ...

Windows Update
Novemberpatches und Nadeldrucker bereiten Kopfschmerzen (14)

Tipp von MettGurke zum Thema Windows Update ...