Dateien / Verzeichnisse löschen, außer...
ich möchte Dateien / Verzeichnisse per Batch löschen, aber mit einer Art Auschlussliste vergleichbar dem /EXCLUDE: - Schalter von XCOPY
Hallo zusammen,
ich habe ein kleines Problem, wo ich nicht mehr weiterkomme.
ich habe ein Stammverzeichnis, in dem Benutzerprofile liegen. Aus diesen Benutzerprofil-Pfaden möchte ich jeweils aus dem Ordner "Eigene Dateien" alles außer 3 bestimmte Ordner rauslöschen.
Wie kann ich das möglichst einfach per Batch-Datei machen?
im XCOPY gibt es den EXCLUDE-Schalter mit dem man eine Auschlussliste definieren kann. Im Prinzip such ich sowas für DEL bzw für RD
Vielen Dank für die Hilfe
gruß kugman
ich habe ein kleines Problem, wo ich nicht mehr weiterkomme.
ich habe ein Stammverzeichnis, in dem Benutzerprofile liegen. Aus diesen Benutzerprofil-Pfaden möchte ich jeweils aus dem Ordner "Eigene Dateien" alles außer 3 bestimmte Ordner rauslöschen.
Wie kann ich das möglichst einfach per Batch-Datei machen?
im XCOPY gibt es den EXCLUDE-Schalter mit dem man eine Auschlussliste definieren kann. Im Prinzip such ich sowas für DEL bzw für RD
Vielen Dank für die Hilfe
gruß kugman
4 Antworten
- LÖSUNG Biber schreibt am 31.07.2006 um 16:17:33 Uhr
- LÖSUNG kugman schreibt am 31.07.2006 um 16:38:08 Uhr
- LÖSUNG kugman schreibt am 31.07.2006 um 17:25:05 Uhr
- LÖSUNG Biber schreibt am 31.07.2006 um 17:59:06 Uhr
LÖSUNG 31.07.2006 um 16:17 Uhr
Hmmm, kugman,
etwas zumindest wirkungsvolles (wenn auch nicht nobelpreisverdächtiges) lässt sich über den Attrib-Befehl machen.
- die drei Dateien, die NICHT gelöscht werden sollen, vorher auf "unsichtbar"/Hidden setzen.
[im Batch mit
Attrib +h x:\Pfad1\datei1.xyz
Attrib +h y:\Pfad2\datei2.xyz
...]
- alle Dateien löschen mit del *.* A:-H /y [alles außer versteckten; ohne Bestätigung]
-Attribut der drei Dateien wieder auf "normal" setzen.
[im Batch mit
Attrib -h x:\Pfad1\datei1.xyz
Attrib -h y:\Pfad2\datei2.xyz
...]
Und die Namen der Dateien wiederum kannst Du ja aus einer Liste, also einer Textdatei holen statt sie fest einzugebrennen im Batchschnipsel.
So die Skizze.
Gruß
Biber
etwas zumindest wirkungsvolles (wenn auch nicht nobelpreisverdächtiges) lässt sich über den Attrib-Befehl machen.
- die drei Dateien, die NICHT gelöscht werden sollen, vorher auf "unsichtbar"/Hidden setzen.
[im Batch mit
Attrib +h x:\Pfad1\datei1.xyz
Attrib +h y:\Pfad2\datei2.xyz
...]
- alle Dateien löschen mit del *.* A:-H /y [alles außer versteckten; ohne Bestätigung]
-Attribut der drei Dateien wieder auf "normal" setzen.
[im Batch mit
Attrib -h x:\Pfad1\datei1.xyz
Attrib -h y:\Pfad2\datei2.xyz
...]
Und die Namen der Dateien wiederum kannst Du ja aus einer Liste, also einer Textdatei holen statt sie fest einzugebrennen im Batchschnipsel.
So die Skizze.
Gruß
Biber
LÖSUNG 31.07.2006 um 16:38 Uhr
Hallo Biber,
danke für den Tip.
Habe jetzt mal selber was geschnipselt, sit fürchterlich undynamisch, aber würde zur Not wohl auch funktionieren:
Hiermit kann ich für einen User ein DIR des Verzeichnisses, ohne die zu verschonenden Verzeichnisse erstellen, die Verzeichnisse, die in der Ausgabedatei loschen.txt stehen kann ich dann in einer weiteren FOR-Anweisung löschen.
das ganze muss ich dann eben noch kapseln, so dass es für alle User läuft, nicht nur für den einen...
danke für den Tip.
Habe jetzt mal selber was geschnipselt, sit fürchterlich undynamisch, aber würde zur Not wohl auch funktionieren:
::Definition der Pfade
set quelle=x:\userxy\eigene dateien
::Definition der NICHT zu löschenden Ordner:
Set ORDNER1=Adobe
Set ORDNER2=IBM
Set ORDNER3=Recycler
Set ORDNER4=Irgendwas
Set ORDNER5=Eigene Datenquellen
dir /ad/b "%quelle%" >ausgabe.txt
FOR /F "delims=\" %%i in (ausgabe.txt) do ( if not "%%i" == "%ORDNER1%" if not "%%i" == "%ORDNER2%" if not "%%i" == "%ORDNER3%" if not "%%i" == "%ORDNER4%" if not "%%i" == "%ORDNER5%" echo %%i >>loschen.txt )
Hiermit kann ich für einen User ein DIR des Verzeichnisses, ohne die zu verschonenden Verzeichnisse erstellen, die Verzeichnisse, die in der Ausgabedatei loschen.txt stehen kann ich dann in einer weiteren FOR-Anweisung löschen.
das ganze muss ich dann eben noch kapseln, so dass es für alle User läuft, nicht nur für den einen...
LÖSUNG 31.07.2006 um 17:25 Uhr
Ich habe die Lösung.
@echo off
::Definition der Pfade
set quelle=\\servername\freigabe\userprofiles
::Definition der NICHT zu löschenden Ordner:
Set ORDNER1=Adobe
Set ORDNER2=IBM
Set ORDNER3=Recycler
Set ORDNER4=BlaBlaBla
Set ORDNER5=Eigene Datenquellen
dir /ad /b "%quelle%" >users.txt
FOR /F "delims=\" %%1 in (users.txt) do (dir /ad/b "%quelle%\%%1\eigene Dateien" >%%1_ausgabe.txt) & (FOR /F "delims=\" %%i in (%%1_ausgabe.txt) do ( if not "%%i" == "%ORDNER1%" if not "%%i" == "%ORDNER2%" if not "%%i" == "%ORDNER3%" if not "%%i" == "%ORDNER4%" if not "%%i" == "%ORDNER5%" echo "%%i">>%%1_loschen.txt )) & (FOR /F "delims=\" %%l in (%%1_loschen.txt) do rd "%quelle%\%%1\eigene Dateien"\%%l /S /Q) & (FOR /F "delims=\" %%l in (%%1_loschen.txt) do del "%quelle%\%%1\eigene Dateien\%%l"\*.* /S /Q)
LÖSUNG 31.07.2006 um 17:59 Uhr
Wenn es sich nur auf komplette Verzeichnisse beziehen soll, dann kannst Du es noch etwas vereinfachen, um dieses schwer wartbare....
....ein bisschen einzudampfen.
Lege die Zeilen, in denen Du bisher die %ORDNER1...5% definierst, als 5 Testzeilen in eine ExcludeDirs.txt in irgendeinen Pfad.
:----ExcludeDirs.txt
:: User-Unterverzeichnisse, die NICHT gelöscht werden solen.
Adobe
IBM
Recycler
BlaBlaBla
Eigene Datenquellen
:----ExcludeDirs.txt
Dann kannst Du statt
...heisst: Nur wenn das Verzeichnis NICHT in der ExcludeDirs.txt gefunden wird, dann wird es gelöscht.
Ist ein bisschen wartbarer und Du hast nicht jeden einzelnen Ordner mitten im Spaghetti-Sourcecode stehen. Denn (soweit ich gehört habe) könnte eine Fehlermeldung "Syntaxfehler" in einem einzeiligen Batch eine abendfüllende Suche bedeuten, wenn die Zeile ein paar tausend Zeichen lang ist... *gg
Funktionieren wird Dein Schnipsel aber auch, ohne Frage, von daher setze bitte den Beitrag ruhig auf "Gelöst", wenn keine Fragen mehr offen sind.
Gruß
Biber
....do ( if not "%%i" == "%ORDNER1%" if not "%%i" == "%ORDNER2%" if not "%%i" == "%ORDNER3%" if not "%%i" == "%ORDNER4%" if not "%%i" == "%ORDNER5%" echo "%%i">>%%1_loschen.txt )) & (FOR /F "delims=\" %%l in (%%1_loschen.txt) do rd ...
Lege die Zeilen, in denen Du bisher die %ORDNER1...5% definierst, als 5 Testzeilen in eine ExcludeDirs.txt in irgendeinen Pfad.
:----ExcludeDirs.txt
:: User-Unterverzeichnisse, die NICHT gelöscht werden solen.
Adobe
IBM
Recycler
BlaBlaBla
Eigene Datenquellen
:----ExcludeDirs.txt
Dann kannst Du statt
....do (if not dies if not das.....usw..usw... .. DO rd .....
dieses hier unten schrieben:..do find /i "%%i" x:\pfad\ExcludeDirs.txt || rd DO.....
...heisst: Nur wenn das Verzeichnis NICHT in der ExcludeDirs.txt gefunden wird, dann wird es gelöscht.
Ist ein bisschen wartbarer und Du hast nicht jeden einzelnen Ordner mitten im Spaghetti-Sourcecode stehen. Denn (soweit ich gehört habe) könnte eine Fehlermeldung "Syntaxfehler" in einem einzeiligen Batch eine abendfüllende Suche bedeuten, wenn die Zeile ein paar tausend Zeichen lang ist... *gg
Funktionieren wird Dein Schnipsel aber auch, ohne Frage, von daher setze bitte den Beitrag ruhig auf "Gelöst", wenn keine Fragen mehr offen sind.
Gruß
Biber