watchdogg
Goto Top

Alle Dateien löschen, die nicht in Textdatei stehen

Hallo Leute,

wie der Titel schon sagt, möchte ich gern alle Dateien in einem Verzeichnis löschen, welche nicht in der Textdatei aufgelistet sind.

Hier gibt es ja schon eine gute Lösung:

Ausgewählte Dateien via Batch-Datei löschen

Es ist nur so:

In der Textdatei stehen aktuelle Dateien, d.h.
es greifen andere User auf diese Dateien, die in der Textdatei stehen zu.
Ich kann diese also nicht verschieben, so wie es im angegebenen Beitrag steht.

Meine Frage ist nun, kann ich die Dateien die NICHT in der Textdatei stehen irgendwie direkt verschieben, ohne die anderen Dateien temporär zu verschieben?

Vielen Dank,

MfG watchdogg

Content-ID: 117439

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

77559
77559 04.06.2009 um 10:22:14 Uhr
Goto Top
Hallo watchdogg,

versuchs mal hiermit (Es ist Unklar ob du jetzt löschen oder verschieben willst)

@Echo off
Set "Base=C:\Test\Löschen"  
Set "Dest=C:\Test\Verschieben\"  
Set "Ausnahmen=C:\Test\Ausnahmen.txt"  
Pushd "%Base%"  
For /F "Delims=" %%A in (  
  'Dir /B * ^|Findstr /V /I /G:"%Ausnahmen%" '  
    ) Do Echo DEL/Move %%A "%Dest%"  
POPD

Ungetestet, den DO Teil kannst du wenn die Ausgabe per Echo passt entsprechend anpassen.

Gruß
LotPings
watchdogg
watchdogg 04.06.2009 um 15:07:56 Uhr
Goto Top
@77559

1000 Dank erstmal,

funktioniert super, nur noch ein kleineres Manko:
Wenn in der "Ausnahmen.txt" beispielsweise:
bla
blubb
steht.
Dann würde er alle Dateien, die diese Zeichenkette im Dateinamen beinhalten,
Also beispielsweise:
bla
blubb
xblubb
blase
blackout
blubberei
...und andere äußerst sinnfreie zeichenketten...
nicht verschieben.
Besser wäre es wenn er nur:
bla
blubb
stehen lassen würde.

Habe es schon mit der findstr - Option c: probiert. Bisher jedoch ohne Erfolg.

MfG watchdogg
77559
77559 04.06.2009 um 16:33:03 Uhr
Goto Top
Deine sinnfreien Beispiele helfen mir nicht weiter,
wie erstellst du denn die Ausnahmen?

Wenn die Dateinamen vol übereinstimmen müssen, setze in die Ausnahmen Datei ein
^vor und hinter die Namen ein $

Das sind RegEx Anker für Zeilenanfang und -ende.

Gruß
LotPings
watchdogg
watchdogg 05.06.2009 um 07:37:55 Uhr
Goto Top
Hab das mit den RegEx Ankern so gelöst:


@echo off
for /f %%i in (quelle.txt) do echo ^%%i$>>ziel.txt


Und dann deinen oberen Code verwendet --> klappt wunderbar.

Ich danke dir wie verrückt LotPings.
77559
77559 05.06.2009 um 09:16:31 Uhr
Goto Top
Freut mich wenns klappt watchdogg.

Wäre auch schön wenn du den Beitrag auf gelöst setzen würdest.

Gruß
LotPings