tommylik
Goto Top

2 Textdateien vergleichen, mit dem Ergebnis Ordner löschen

Hallo an alle,

Habe folgende Situation:

@echo on rem ff & setlocal
cls
Set Quelle=D:\Internet_Seiten\Batch
if exist %Quelle%\verzeichniss.txt goto loeschen
:loeschen
del %Quelle%\verzeichniss.txt
for /F "delims=" %%d in ('dir D:\ /a:d /b /o:n') do echo D:\%%d >> %Quelle%\verzeichniss.txt  
Hiermit erstelle ich mir meine Datei mit allen Ordnernamen auf Laufwerk D.


und hiermit möchte ich nun die beiden Textdateien vergleichen.
In der Textdatei "Ord_loeschen.txt" habe ich Namen von Ordner eingetragen die gelöscht werden können.
for /f "delims=" %%i in (%Quelle%\verzeichniss.txt) do @Findstr /i /v /C:"%%i" %Quelle%\Ord_loeschen.txt >nul || echo %%i  

Das echo am Ende wollte ich dann gegen "rd" austauschen falls das Ergebnis richtig wäre. Ist es aber nicht.

Die Verzeichnisliste wird erstellt und dann passiert weiter garnichts.

Ich habe mir zur TESTZWECKEN einen Ordner auf LW D: angelegt, mit den Namen "MAN", der in beiden Dateien vorkommt.
Die restlichen Namen der Ordner sind unterschiedlich.
Der Code sollte mir nun in diesem Fall den Ordner "MAN" nach dem vergleich löschen.
Sind mehrere Ordner identisch sollen die natürlich auch gelöscht werden.

Vielen Dank im vorraus.

Mfg Tom

Content-Key: 164547

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

Printed on: April 16, 2024 at 07:04 o'clock

Member: Tommylik
Tommylik Apr 14, 2011 at 05:07:59 (UTC)
Goto Top
Hallo an alle,

Nachtrag:

Hiermit erstelle ich mir meine Datei mit allen Ordnernamen auf Laufwerk D.
Muß ich das überhaupt?
Oder kann man das nicht in eine Variable schreiben? Und den vergleich dann mit der Variable machen.
Das wäre besser und ich könnte mir eine Datei ersparen.

Mfg Tom
Member: Skyemugen
Skyemugen Apr 14, 2011 at 05:42:45 (UTC)
Goto Top
Aloha,

(nur kurz vorbeischauen kann), dein Schalter /v verwirrt mich in deinem findstr ... dachte du suchst etwas, was enthalten ist und nicht was nicht enhalten ist. =)

greetz André
Member: Tommylik
Tommylik Apr 14, 2011 at 06:00:32 (UTC)
Goto Top
Hallo André

Vielen Dank für deine Antwort.

Ups ja der Schalter ist falsch aber es ändert sich trotzdem nichts.
Die Verzeichnisliste wird erstellt und weiter passiert nichts.

Das ist ja mein Problem, dadurch weiß ich nicht was falsch ist.

Mfg Tom
Member: bastla
bastla Apr 14, 2011 at 06:06:31 (UTC)
Goto Top
Hallo Tommylik!

Auch von mir nur ein kurzer Hinweis: Es ist sinnvoll, eine Datei mit den Ordnernamen zu erstellen, da Du dann einen Vergleich mit "findstr /i /g:Datei1 Datei2" durchführen kannst ...

Grüße
bastla
Member: Tommylik
Tommylik Apr 14, 2011 at 06:12:30 (UTC)
Goto Top
Hallo

Ok habe den Fehler gefunden.

for /f %%i in (%Quelle%\verzeichniss.txt) do @Findstr /i /C:"%%i" %Quelle%\Ord_loeschen.txt >nul || echo %%i  

Das "delims=" war zu viel.

Dann wurde mir der besagte Ordner "MAN" angezeigt.

Ich habe dann das echo gegen rd getauscht und siehe da, der Code hat mir dann auch den Ordner gelöscht.

for /f %%i in (%Quelle%\verzeichniss.txt) do @Findstr /i /C:"%%i" %Quelle%\Ord_loeschen.txt >nul || rd %%i  

Somit ist ein Teil erledigt und bleibt nur noch:
@echo off & setlocal
cls
Set Quelle=D:\Internet_Seiten\Batch
if exist %Quelle%\verzeichnisse.txt goto loeschen
:loeschen
del %Quelle%\verzeichnisse.txt
for /F "delims=" %%d in ('dir D:\ /a:d /b /o:n') do echo D:\%%d >> %Quelle%\verzeichnisse.txt  
Hiermit erstelle ich mir meine Datei mit allen Ordnernamen auf Laufwerk D.

Nachtrag:

Muß ich das überhaupt?
Oder kann man das nicht in eine Variable schreiben? Und den vergleich dann mit der Variable machen.
Das wäre besser und ich könnte mir eine Datei ersparen.

Vielen Dank noch mal

Mfg Tom
Member: Tommylik
Tommylik Apr 14, 2011 at 07:35:15 (UTC)
Goto Top
Hallo an alle,

Ich denke ich habe einen Lösungsansatz gefunden aber komme nicht weiter.
Könnte mir einer von Euch helfen.

Mit dem ersten Code-Schnipsel werden alle Ordner eingelesen.
for /f "tokens=1* delims=" %%a in ('dir D:\ /a:d /b /o:n') do set Ordner=%%a  

Aber der 2. Code-Schnippsel funktioniert nicht so wie erwünscht.
Er nimmt nur den letzten Ordner der aufgelistet wird.
Er soll aber jeden Ordner mit der Ord_loeschen.txt vergleichen.
for /f %%i in (D:\%Ordner%) do @Findstr /i /C:"%%i" %Quelle%\Ord_loeschen.txt >nul && echo %%i  

Das "echo" am ende ist erstmal zu Testzwecke.

Vielen Dank im voraus.

Mfg Tom
Member: Skyemugen
Skyemugen Apr 14, 2011 at 08:25:47 (UTC)
Goto Top
Aloha,

naja normal kann eine Variable nunmal nur einen Wert enthalten, für Mehrfachbearbeitung käme doch z.B. ein
<code type>for /f "tokens=1* delims=" %%a in ('dir D:\ /a:d /b /o:n') do call :Ablauf "%%a"
:Ablauf
for /f %%i in (D:\"%~1") do @findstr /i /C:"%%i" %Quelle%\Ord_loeschen.txt >nul && echo %%i
goto :eof

(ungetestet) in Frage.

greetz André
Member: Tommylik
Tommylik Apr 14, 2011 at 08:51:04 (UTC)
Goto Top
Hallo André

Vielen Dank erstmal für deine Hilfe.

So funktioniert es. Ich mußte die Anführungszeichen in der 2. for Schleife nur ändern.
Aber es gibt ein Phänomen. Wenn man den Code ausführt, kehrt der Prompt nicht wieder zurück.
Der Cursor blinkt einfach links oben in der Ecke. Keine Ahnung warum hast du eine Idee?

@echo off & setlocal 
cls
Set Quelle=D:\Internet_Seiten\Batch

for /f "tokens=1* delims=" %%a in ('dir D:\ /a:d /b /o:n') do call :Ablauf "%%a"   

:Ablauf 
for /f %%i in ("D:\%~1") do @Findstr /i /C:"%%i" %Quelle%\Ord_loeschen.txt >nul && rd %%i   
goto :eof

Nochmals vielen Dank.

Mfg Tom
Member: Skyemugen
Skyemugen Apr 14, 2011 at 09:22:45 (UTC)
Goto Top
Aloha,

naja da fehlt ja noch ein Abschluss direkt nach der Hauptschleife (à la goto :eof you know?), könnte daran liegen.

greetz André
Member: Tommylik
Tommylik Apr 14, 2011 at 10:21:21 (UTC)
Goto Top
Hallo André,

Wunderbare Arbeit, funktioniert einwandfrei.

Da hätte ich auch selber darauf kommen können.

Nun ja, dafür bist auch der Profi.

Nochmals vielen vielen Dank.

Mfg Tom
Member: Skyemugen
Skyemugen Apr 14, 2011 at 11:14:29 (UTC)
Goto Top
Aloha

Zitat von @Tommylik:
Nun ja, dafür bist auch der Profi.

[OT]
... bei Weitem noch lange nicht *g* die fünf Monate mit denen ich was mit batch zu tun habe, machen mich vllt. zum erweiterten Einsteiger ;D (oder doch schon einen runaway, haha) aber learning by doing und genau solche Threadanfragen hier im Forum bringen mich voran

Ich freue mich immer, wenn etwas funktioniert und man jemandem helfen konnte ^_^

daher, bitte, gern geschehen und have a nice (wenn auch ohne Sonne ...) day ;)

greetz André
[/OT]