Daten unterhalb eines Verzeichnisses löschen?
Moderators: Hacker, Stefan2, white
Daten unterhalb eines Verzeichnisses löschen?
Guten Tag
folgendes Problem (bzw. Aufgabe):
Ich habe die Verzeichnisse
c:\heute
c:\morgen
beide haben diversen Inhalt. Jetzt möchte ich den Inhalt der Verzeichnisse löschen, aber die Verzeichnisse stehen lasssen.
mühselige Lösung 1:
gehe nach heute hinein - markiere und lösche alles - gehe zurück - gehe nach morgen hinein - markiere und lösche alles - gehe zurück.
Funktioniert, ist aber lange Klickerei.
Nicht-Lösung 2:
Markiere heute und morgen - lösche.
Funktioniert nicht, weil auch heute und morgen verschwinden.
Gibt es elegantere Methoden?
danke im voraus.
Peter
folgendes Problem (bzw. Aufgabe):
Ich habe die Verzeichnisse
c:\heute
c:\morgen
beide haben diversen Inhalt. Jetzt möchte ich den Inhalt der Verzeichnisse löschen, aber die Verzeichnisse stehen lasssen.
mühselige Lösung 1:
gehe nach heute hinein - markiere und lösche alles - gehe zurück - gehe nach morgen hinein - markiere und lösche alles - gehe zurück.
Funktioniert, ist aber lange Klickerei.
Nicht-Lösung 2:
Markiere heute und morgen - lösche.
Funktioniert nicht, weil auch heute und morgen verschwinden.
Gibt es elegantere Methoden?
danke im voraus.
Peter
TC 10.xx / #266191
Win 10 x64
Win 10 x64
- ghisler(Author)
- Site Admin
- Posts: 50650
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Wenn das die einzigen Verzeichnisse an diesem Ort sind, dann einfach Strg+B drücken (Zweigansicht) und die Dateien löschen. Die Verzeichnisse bleiben dann übrig.
Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com
Hilft dir eine Batchdatei?
Das ist nur mal so in den Raum geworfen. Bitte vor der Benutzung testen.
Code: Select all
@ECHO OFF
C:
CD \
CD heute
ECHO Entferne das REM in der naechsten Zeile wenn du weißt was du machst.
REM rd /s/q
ECHO Der Inhalt des Ordners heute wurde entfernt
CD \
CD morgen
ECHO Entferne das REM in der naechsten Zeile
REM rd /s/q
ECHO Der Inhalt des Ordners morgen wurde entfernt
PAUSE
/join #TCMD Chat at irc.freenode.net - Today's newbies are tomorrow's experts.
Dachte ich auch, aber ein paar Details scheinen zu ärgern.RID500 wrote:Hilft dir eine Batchdatei?...
Das "rd" braucht eine exakte Verzeichnisangabe und schluckt nicht "alles".
Ein "cd heute" mit "del *.* /s /f /q" lässt die Verzeichnisse stehen ...
Jetzt denke ich, dass die "Ansicht Verzeichnisbaum" eine passable Navigation bietet ..
Peter
TC 10.xx / #266191
Win 10 x64
Win 10 x64
vielleicht hilft ein autohotkey script...
http://de.autohotkey.com/
http://de.autohotkey.com/
Wenn Batch, dann vielleicht auf diese Art und Weise:
Code: Select all
@echo off
deltree /y c:\heute\*.*
deltree /y c:\morgen\*.*
Code: Select all
´deltree´is not recognized as an internal or external command,
operable program or batch file.
TC 10.xx / #266191
Win 10 x64
Win 10 x64
DELTREE gibt's nur unter WinDOS. Unter NT ist es RD (RMDIR), was bereits erwähnt wurde.
Um selektiv Unterverzeichnisse zu löschen, bedarf es einer FOR-Schleife, alternativ kann man auch die ACLs der nicht zu löschenden Verzeichnisse entsprechend modifizieren und dann RD verwenden.
Icfu
Um selektiv Unterverzeichnisse zu löschen, bedarf es einer FOR-Schleife, alternativ kann man auch die ACLs der nicht zu löschenden Verzeichnisse entsprechend modifizieren und dann RD verwenden.
Icfu
This account is for sale
Hi,
habe mir erlaubt, RID500s Idee aufzugreifen und ein wenig zu erweitern.
Grüße,
Karl
habe mir erlaubt, RID500s Idee aufzugreifen und ein wenig zu erweitern.
Code: Select all
@ECHO OFF
:: Programm: wegdamit.cmd
:: Idee : RID500
:: Erweitert: Karlchen
C:
CD \heute
:: Achtung: der Vergleich achtet auf Gross/Kleinschreibung!
if "%CD%"=="C:\heute" (
ECHO Entferne die REMs in den naechsten Zeile wenn du weißt was du machst.
:: Loesche alle Dateien ohne Fragen rekursiv
REM del *.* /f /s /q
:: Loesche die Unterverzeichnisse rekursiv ohne Fragen
REM for /d %%a in (*.*) rd %%a /s /q
ECHO Der Inhalt des Ordners heute wurde entfernt
)
else (
echo Bin nicht im Verzeichnis C:\heute, sondern in %CD%
)
CD \morgen
:: Achtung: der Vergleich achtet auf Gross/Kleinschreibung!
if "%CD%"=="C:\morgen" (
ECHO Entferne die REMs in den naechsten Zeile wenn du weißt was du machst.
:: Loesche alle Dateien ohne Fragen rekursiv
REM del *.* /f /s /q
:: Loesche die Unterverzeichnisse rekursiv ohne Fragen
REM for /d %%a in (*.*) rd %%a /s /q
ECHO Der Inhalt des Ordners morgen wurde entfernt
) else (
echo Bin nicht im Verzeichnis C:\morgen, sondern in %CD%
)
PAUSE
Karl
- sqa_wizard
- Power Member
- Posts: 3893
- Joined: 2003-02-06, 11:41 UTC
- Location: Germany
Dann setzte ich noch einen drauf: Alle markierten Verzeichnisse werden geleert !
Im TC bitte einen Button anlegen mit:
Kommando= wegdamit.cmd
Parameter= %S
Tooltip= Markierte Verzeichnisse leeren
Im TC bitte einen Button anlegen mit:
Kommando= wegdamit.cmd
Parameter= %S
Tooltip= Markierte Verzeichnisse leeren
Code: Select all
:: Programm: wegdamit.cmd
:: Idee : RID500
:: Erweitert: Karlchen
:: TC intern: sqa_wizard
:: Markierte Verzeichnisse (als Parameter uebergeben) werden geleert
:: Syntax: wegdamit [dir1] [dir2] ... [dir9]
@ECHO OFF
FOR %%d IN ( %* ) DO (
:: Sicherheitshalber noch mal Existenz testen !
IF EXIST %%d (
CD %%d
ECHO ... %%d wird geleert
REM Entferne die REMs in den naechsten Zeile wenn du weißt was du machst.
:: Loesche alle Dateien ohne Fragen rekursiv
REM del *.* /f /s /q
:: Loesche die Unterverzeichnisse rekursiv ohne Fragen
REM for /d %%a in (*.*) rd %%a /s /q
ECHO Der Inhalt des Ordners %%d wurde entfernt
REM ... und wieder zum Ausgangs-Verzeichnis
CD ..
)
)
PAUSE
#5767 Personal license
Wenn ich alles richtig verstanden habe, geht das auch viel kürzer:
Ist natürlich nur dann sinnvoll, wenn man die Attribute der beiden Verzeichnisse nicht für Synchronisation o.ä. benötigt.
Wenn die Attribute (und evtl. die NTFS-Rechte) egal sind, dann ist es so viel kürzer.
OK, die Idee von RID500, Karlchen und sqa_wizard ist natürlich universell einsetzbar, da durch Parameter steuerbar. Muss man aber aufpassen, dass man nicht zuviel löscht
Deswegen hier eine kleine Erweiterung:
Wenn man die Verzeichnisliste untereinander haben will, dann so:
statt einfach
MfG Dalai
Code: Select all
REM erst alles löschen
if exist c:\heute rd /s /q C:\heute
if exist c:\morgen rd /s /q C:\morgen
REM dann die obersten Verzeichnisse neu anlegen
md c:\heute
md c:\morgen
Wenn die Attribute (und evtl. die NTFS-Rechte) egal sind, dann ist es so viel kürzer.
OK, die Idee von RID500, Karlchen und sqa_wizard ist natürlich universell einsetzbar, da durch Parameter steuerbar. Muss man aber aufpassen, dass man nicht zuviel löscht

Deswegen hier eine kleine Erweiterung:
Code: Select all
@ECHO OFF
:: Programm: wegdamit.cmd
:: Idee : RID500
:: Erweitert: Karlchen
:: TC intern: sqa_wizard
:: Markierte Verzeichnisse (als Parameter uebergeben) werden geleert
:: Syntax: wegdamit [dir1] [dir2] ... [dir9]
echo.
echo Sie stehen im Vezeichnis
echo %CD%.
echo.
echo Folgende Verzeichnisse wirklich loeschen?
echo %*
echo.
set /p erase=Ihre Eingabe (j/n):
if [%erase%]==[j] goto loesche
goto :EOF
:loesche
FOR %%d IN ( %* ) DO (
:: Sicherheitshalber noch mal Existenz testen !
IF EXIST %%d (
CD %%d
ECHO ... %%d wird geleert
REM Entferne die REMs in den naechsten Zeile wenn du weißt was du machst.
:: Loesche alle Dateien ohne Fragen rekursiv
REM del *.* /f /s /q
:: Loesche die Unterverzeichnisse rekursiv ohne Fragen
REM for /d %%a in (*.*) rd %%a /s /q
ECHO Der Inhalt des Ordners %%d wurde entfernt
REM ... und wieder zum Ausgangs-Verzeichnis
CD ..
)
)
PAUSE
Code: Select all
for %%i in (%*) do echo %%i
Code: Select all
echo %*
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
An alle bisherigen Mitgestalter: Nette Batch!
Meine Ergänzungen dazu:
Meine Ergänzungen dazu:
- beim del kann "/s" zur Zeitersparnis entfallen, Dateien in Unterverzeichnissen werden von rd /s schneller entsorgt
- mit "/a" entsorgt del zusätzlich auch versteckte und Systemdateien
- dem CD würde ich sicherheitshalber noch ein "/D" mitgeben, damit ggf. auch das Laufwerk gewechselt wird, falls im Zielparameter angegeben (funktioniert auch, wenn nicht angegeben)
- das Ergebnis von CD könnte auch eine Prüfung vertragen
(die Exist-Prüfung gibt auch bei existierender Datei (statt Verzeichnis) OK/wahr zurück - damit würde CD nicht ausgeführt, das Löschen aber schon; Statusmeldungen angepasst)
sqa_wizard wrote:Dann setzte ich noch einen drauf: Alle markierten Verzeichnisse werden geleert !
Im TC bitte einen Button anlegen mit:
Kommando= wegdamit.cmd
Parameter= %S
Tooltip= Markierte Verzeichnisse leeren
Code: Select all
:: Programm: wegdamit.cmd :: Idee : RID500 :: Erweitert: Karlchen, Dalai, StatusQuo :: TC intern: sqa_wizard :: Markierte Verzeichnisse (als Parameter uebergeben) werden geleert :: Syntax: wegdamit [dir1] [dir2] ... [dir9] @ECHO OFF echo. echo Sie stehen im Vezeichnis echo %CD%. echo. echo Folgende Verzeichnisse wirklich loeschen? echo %* echo. set /p erase=Ihre Eingabe (j/n): if [%erase%]==[j] goto loesche goto :EOF :loesche set erase= FOR %%d IN ( %* ) DO ( :: Sicherheitshalber noch mal Existenz testen ! IF EXIST %%d ( CD /D %%d if not errorlevel 1 ( ECHO ... %CD% wird geleert REM Entferne die REMs in den naechsten Zeile wenn du weißt was du machst. :: Loesche alle Dateien ohne Fragen REM del *.* /f /q :: oder alternativ: inklusive versteckte + Systemdateien: REM del *.* /f /a /q :: Loesche die Unterverzeichnisse rekursiv ohne Fragen REM for /d %%a in (*.*) rd %%a /s /q ECHO ... %CD%: Der Inhalt dieses Ordners wurde entfernt REM ... und wieder zum Ausgangs-Verzeichnis CD .. ) ) ) PAUSE
Who the hell is General Failure, and why is he reading my disk?
-- TC starter menu: Fast yet descriptive command access!
-- TC starter menu: Fast yet descriptive command access!
Ja, das setzt allerdings voraus, dass die beiden obersten Verzeichnisse nicht dauerhaft und/oder gleichzeitig von einem anderen Programm benutzt/blockiert werden. Sonst können sie entweder nicht gelöscht werden (weil geblockt) oder sollten es nicht, damit das andere Programm nicht ins Leere greift.Dalai wrote:Wenn ich alles richtig verstanden habe, geht das auch viel kürzer:Ist natürlich nur dann sinnvoll, wenn man die Attribute der beiden Verzeichnisse nicht für Synchronisation o.ä. benötigt.Code: Select all
REM erst alles löschen if exist c:\heute rd /s /q C:\heute if exist c:\morgen rd /s /q C:\morgen REM dann die obersten Verzeichnisse neu anlegen md c:\heute md c:\morgen
Who the hell is General Failure, and why is he reading my disk?
-- TC starter menu: Fast yet descriptive command access!
-- TC starter menu: Fast yet descriptive command access!
Guten Morgen
da läuft ja einiges - danke für die vielen Beiträge.
Mangels Zeit und richtigem PC kann ich nicht im Detail nacharbeiten, aber etwas muss ich konkretisieren:
- Die Verzeichnisse liegen natürlich nicht alle im gleichen Pfad; da war mein Beispiel etwas zu einfach . Sie liegen auf verschiedenen Pfaden, und daher muss der ganze Ablauf nicht absolute, sondern relative Pfade haben.
- Es gibt insgesamt 5 Verzeichnisnamen, die es geben kann, die aber nicht immer vorhanden sind.
Bsp.:Ablauf:
- Der Anwender geht ins Zielverzeichnis, z.B. c:\testa\testb. Das geht händisch, nicht automatisch.
- Im Zielverzeichnis werden die vorhandenen Verzeichnisse gelöscht. Ob man die vorhandenen Verzeichnisse mit "if exist" prüft oder im TC markiert und dann startet - das sehe ich offen.
Die Idee oben, auch die Verzeichnisse zu löschen und dann automatisch anzulegen (aber nur die vorher gelöschten), ist grundsätzlich gut, verändert aber das Datum des Verzeichnisses. Ob das wirklich auch wichtig ist weiß ich momentan selber nicht.
Peter
da läuft ja einiges - danke für die vielen Beiträge.
Mangels Zeit und richtigem PC kann ich nicht im Detail nacharbeiten, aber etwas muss ich konkretisieren:
- Die Verzeichnisse liegen natürlich nicht alle im gleichen Pfad; da war mein Beispiel etwas zu einfach . Sie liegen auf verschiedenen Pfaden, und daher muss der ganze Ablauf nicht absolute, sondern relative Pfade haben.
- Es gibt insgesamt 5 Verzeichnisnamen, die es geben kann, die aber nicht immer vorhanden sind.
Bsp.:
Code: Select all
c:\testa\testb\heute
c:\testa\testb\morgen
c:\testa\testb\übermorgen
c:\testx\heute
c:\testx\morgen
c:\testx\gestern
c:\testx\vorgestern
- Der Anwender geht ins Zielverzeichnis, z.B. c:\testa\testb. Das geht händisch, nicht automatisch.
- Im Zielverzeichnis werden die vorhandenen Verzeichnisse gelöscht. Ob man die vorhandenen Verzeichnisse mit "if exist" prüft oder im TC markiert und dann startet - das sehe ich offen.
Die Idee oben, auch die Verzeichnisse zu löschen und dann automatisch anzulegen (aber nur die vorher gelöschten), ist grundsätzlich gut, verändert aber das Datum des Verzeichnisses. Ob das wirklich auch wichtig ist weiß ich momentan selber nicht.
Peter
TC 10.xx / #266191
Win 10 x64
Win 10 x64