gurkensalat89
Goto Top

Ordnerinhalt komplett löschen, bis auf einen Unterordner

Hallo,

ich habe einen Ordner, mit Unterordnern und Dateien. Ich möchte den kompletten Inhalt löschen, bis auf einen bestimmten Unterordner, der noch bestehen bleiben soll.
Das Löschen mache ich mit "rmdir /s /q c:\ordner".
Allerdings lösch ich damit ja nun alles. Ich möchte aber, dass "C:\ordner\speziellerOrdner" noch bestehen bleibt.
Gibt es dafür eine Lösung?

Content-Key: 142712

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

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

Mitglied: 77559
77559 May 12, 2010 at 12:05:38 (UTC)
Goto Top
Mach den Ordner den du behalten willst, zum aktuellen Ordner, der wird nicht gelöscht.

Gruß
LotPings
Member: PaT.sls
PaT.sls May 12, 2010 at 12:39:26 (UTC)
Goto Top
hi,

es ist vlt nicht die sauberste Lösung aber die einfachste die mir einfällt^^
So umgehst du Quasi das Problem

md "c:\TEMP"  
move "C:\ordner\speziellerOrdner" "c:\TEMP"  
rmdir /s /q c:\ordner
md "C:\ordner"  
move "c:\TEMP\speziellerOrdner" "C:\ordner"  
rmdir /s /q c:\TEMP

Bei der geschichte würde ich aber noch Sicherheitsabfragen machen, damit der nur Löscht wenn das Backup existiert, und den TEMP löscht wenn die sachen auch wirklich wieder im Ordner sind...nicht das weil er aus irgend nem grund nen fehler hat und die daten weg sind

Grüße Pascal

EDIT: Hier mit Sicherheitsabfragen:

echo Dummyfile > C:\ordner\speziellerOrdner\dummy.txt
md "c:\TEMP"  
move "C:\ordner\speziellerOrdner" "c:\TEMP"  
if not exist C:\TEMP\dummy.txt goto PAUSE
rmdir /s /q c:\ordner
md "C:\ordner"  
move "c:\TEMP\speziellerOrdner" "C:\ordner"  
if not exist C:\ordner\speziellerOrdner\dummy.txt goto PAUSE
rmdir /s /q c:\TEMP
del C:\ordner\speziellerOrdner\dummy.txt 
exit
:PAUSE
echo.
echo Fehler beim Sichern der Daten, breche Vorgang aus Sicherheitsgründen ab!
pause
exit
Member: Biber
Biber May 12, 2010 at 16:11:44 (UTC)
Goto Top
Moin gurkensalat89,

ich würde für den Fall, dass es sich um einen Ordner handelt, der wie oben beschrieben direkt auf der ersten Unterebene liegt, mit einer FOR/D Anweisung arbeiten.

Wollte ich z.B. in meinem Ordner "d:\temp" alle Unterordner "backup*" löschen außer "..\Backup3" ......dann
(=18:09:19  D:\temp=)
------- ohne Ausnahme ---
>for /d %i in (d:\temp\backup*) do @echo rd /s /q "%i"  
rd /s /q "d:\temp\Backup1"  
rd /s /q "d:\temp\backup2"  
rd /s /q "d:\temp\backup3"  

---- mit Ausnahme ---
(=18:09:30  D:\temp=)
>for /d %i in (d:\temp\backup*) do @if /i "%i" neq "d:\temp\backup3" @echo rd /s /q "%i"  
rd /s /q "d:\temp\Backup1"  
rd /s /q "d:\temp\backup2"  

Grüße
Biber
Mitglied: 60730
60730 May 12, 2010 at 16:25:42 (UTC)
Goto Top
Servus,

fangen wir mal leicht an:

for /f %a in ('dir /b /S /AD') do echo %a

so bekommst du (in der Dosbox) alle Unterordner serviert.

angenommen du hast in dem Ordner einen Unterordner WINDOWS

for /f %a in ('dir /b /S /AD') do if not "%a"=="WINDOWS" echo %a
Dann siehts du fast die gleiche Liste wie oben, außer dem WINDOWS Ordner

Nach Bibers berechtigtem Einwand - könnte es auch sein, dass der Ordner auch "wINdOws" heissen könnte, das federt man mit einem /i ab

for /f %a in ('dir /b /S /AD') do if /i not "%a"=="WINDOWS" echo %a

Jetzt willst du aber nix angezeigt bekommen, sondern einen Befehl ausführen.
Da nehmen wir doch den alten aber guten BiberBastla Trick
for /f %a in ('dir /b /S /AD') do if /i not "%a"=="WINDOWS" echo "rmdir %a" >>logfile.txt

Das logfile schaust du dir an, obs klappt und alle weiteren Schritte sollten klar sein.

Gruß

edit Biber du rechtsüberholer *duck*
mich würde ja echt mal interessieren, wie dein Essen schmeckt, wenn du selber schreibst, dass du besser kochen kannst

edit ² ich kaufe dem dir Befehl je noch ein /S

¶“¡¢|{}≠¡¡¿
Member: Biber
Biber May 12, 2010 at 16:50:07 (UTC)
Goto Top
Moin T-Mo,

Zitat von @60730:
edit ² ich kaufe dem dir Befehl je noch ein /S
Wenn du hier ohnehin vorauseilend dein Weihnachtsgeld für Buchstabenkäufe auf den Kopp haust, dann wäg doch mal ab, ob du dir nicht noch ein "i" leisten kannst für den IF-Vergleichsoperator "i" (für "is' mir egal ob gross oder kleingeschrieben").

Sonst wird eventuell zwar ein Unterverzeichnis namens "WINDOWS" verschont, aber nahe Verwandte wie "Windows" nicht... face-wink

Grüße
Biber
Mitglied: 60730
60730 May 12, 2010 at 18:45:04 (UTC)
Goto Top
Zitat von @Biber:
Wenn du hier ohnehin vorauseilend dein Weihnachtsgeld für Buchstabenkäufe auf den Kopp haust, dann wäg doch mal ab,
ob du dir nicht noch ein "i" leisten kannst für den IF-Vergleichsoperator "i" (für "is'
mir egal ob gross oder kleingeschrieben").

Sonst wird eventuell zwar ein Unterverzeichnis namens "WINDOWS" verschont, aber nahe Verwandte wie "Windows"
nicht... face-wink

@Biber:

Eigentlich wollte ich Sie verschonen, die nahen Verwandten wie die lieben Tanten
Denn mein Weihnachtsgeld reicht nur für Konsonanten
Für Vokale muß ich doch aus der Urlaubskasse zahle

Wo die Kohle eh wech ist was ein Mist
Tu ich dem ganzen auch noch spend´ ein weiteres Ambersand
Weil die Batch den Zeichensalat sonst nicht erkennt.
Aber das hab ich nicht verpennt, dachte das der Gurkensalat das kennt
Dafür schenk ich mir das RMdir
Und nehm das RD dafür

for /f %%a in ('dir /b /S /AD') do if /i not "%%a"=="WINDOWS" echo "rd %%a" >>logfile.txt  

Grüße
Biber
retour face-wink
wer ein gutes Auge hat, darf mich gerne rechts überholen