mc-doubleyou
Goto Top

Löschen aller Order in Ordner außer ...

Hallo,

ganz neu auf dem Gebiet bin ich ja nun nicht mehr und insofern hab ich schon einen Schnippsel .. denn dann aber gleich mit Fehler inklusive *gg*

C:\Dokumente und Einstellungen\admin>for /f "delims=Test003" %i in ('dir /b /ad /o-n "C:\temp\Test"') do rd /s /q "C:\temp\Test\Test%i"  

C:\Dokumente und Einstellungen\admin>rd /s /q "C:\temp\Test\Test58941+6"  

C:\Dokumente und Einstellungen\admin>rd /s /q "C:\temp\Test\Test4156"  

C:\Dokumente und Einstellungen\admin>rd /s /q "C:\temp\Test\Test82"  
Das System kann die angegebene Datei nicht finden.

C:\Dokumente und Einstellungen\admin>rd /s /q "C:\temp\Test\Test2"  

C:\Dokumente und Einstellungen\admin>rd /s /q "C:\temp\Test\Test1"  

Kann mir bitte wer sagen warum da der Ordner nicht gefunden werden kann bzw. warum der mir bei diesem Ordner die 3 schluckt, Ordner heißt nämlich Test382

Danke! | Schönes Wochenende!

lg mc-dy

Content-Key: 156301

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

Printed on: April 19, 2024 at 04:04 o'clock

Mitglied: 60730
60730 Dec 03, 2010 at 16:04:03 (UTC)
Goto Top
moin,

schau dich mal um - entweder in deiner Dosbox nach for /? oder und hier nach einer sehr aktuellen Anleitung zum Thema Schleifen.

btw:
warum der mir bei diesem Ordner die 3 schluckt
"delims=Test003"
bedeutet - akzeptiere als Trennzeichen
  • T
  • e
  • s
  • t
  • 0
  • 3

Ist also nicht nur völliger Bullshit und weil du eben die 3 als Trennzeichen drin hast....

for /f %i in ('dir /b /ad /o-n "C:\temp\Test"') do rd /s /q "C:\temp\Test\Test%i"

Gruß
Member: bastla
bastla Dec 03, 2010 at 17:20:27 (UTC)
Goto Top
Hallo mc-doubleyou!

Das Mysterium hinsichtlich "Test382" hat T-Mo ja schon geklärt - wenn ich nun noch vermute, dass mit "Test003" jener (einzelne) Ordner gemeint ist, der nicht gelöscht werden soll, würde ich zu folgender Vorgangsweise raten:
for /f "delims=" %i in ('dir /b /ad "C:\temp\Test"^|findstr /x /i /v /c:"Test003"') do @echo rd /s /q "C:\temp\Test\%i"
Das "@echo" nur, damit beim Testen nix Schlimmes passiert, und das "/c:", falls Du (oder ein Leser dieses Threads) die Nummer mal für einen Ordner mit im Namen enthaltenem Leerzeichen abziehen will(st) ...

... und falls der Ordnername nur mit "Test003" beginnen muss, einfach "/b" anstelle von "/x" ...

Grüße
bastla
Member: mc-doubleyou
mc-doubleyou Dec 06, 2010 at 08:43:37 (UTC)
Goto Top
Hallo bastla,

klappt perfekt, Danke!

Kannst mir vl bitte auch erklären was was heißt und warum das nun klappt?

Danke!

lg mc-dy
Member: bastla
bastla Dec 06, 2010 at 13:24:44 (UTC)
Goto Top
Hallo mc-doubleyou!

Teile davon kennst Du ja schon, aber der Vollständigkeit halber:
for /f "delims=" %i in
Gehe die Ergebnisse (siehe nächsten Teil) zeilenweise durch und zerlege die Zeilen nicht in Einzelteile ("delims=" legt fest, dass es kein - also auch nicht die defaultmäßigen Leerzeichen und TAB - Trennzeichen geben soll, anhand dessen die Zerlegung erfolgen könnte)
('dir /b /ad "C:\temp\Test"
Liste alle Ordner (directories, daher "/ad") von "C:\temp\Test" auf und gebe nur den Namen (nicht auch zB Datum, ...) aus, ...
^|findstr /x /i /v /c:"Test003"')
... filtere aber das Ergebnis vor der Weiterverarbeitung noch so, dass nur alle gesamten ("/x") Zeilen ohne Berücksichtigung von Groß/Kleinschreibung ("/i"), welche nicht ("/v") "Test003" lauten (mit "/c:" wird nur für den Fall vorgesorgt, dass einmal im Suchbegriff Leerzeichen vorhanden wären), übrig bleiben
do @echo rd /s /q "C:\temp\Test\%i"
und lösche die jeweiligen Ordner kommentarlos ("/q") samt allen enthaltenen Dateien / Unterordnern ("/s") - da in "%i" nur der Ordnername enthalten ist, muss hier auch nochmals der Pfad "C:\temp\Test" angegeben werden.

Grüße
bastla