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
GELÖST

Löschvorgang automatisieren

Frage Entwicklung Batch & Shell

Mitglied: Franzmann

Franzmann (Level 1) - Jetzt verbinden

12.10.2006, aktualisiert 08.01.2015, 4028 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 ?
Mit freundlichen Grüßen
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...
Mit freundlichen Grüßen
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 ?
Mit freundlichen Grüßen

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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Choice Automatisieren (2)

Frage von agowa338 zum Thema Batch & Shell ...

Windows Server
gelöst Adminberechtigung bei Ausführung durch Ordner automatisieren ? (4)

Frage von Arteas zum Thema Windows Server ...

VB for Applications
Excel VBA Sortierung Automatisieren (3)

Frage von chaos2go zum Thema VB for Applications ...

Outlook & Mail
Abwesenheitsnotiz Outlook 2010 automatisieren, jeweils Freitags (2)

Frage von blowdow zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

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 ...