Verzeichnisse auslesen und vergleichen
Hallo Zusammen,
Ich arbeite an einer Batch mit der ich Unterverzeichnisse auslesen und auf mögliche Doppelungen vergleichen will.
Die möglichen Doppelungen sollen einfach als Echo ausgegeben werden.
Ich bin Batch-Neuling, aber doch recht begeistert von den Möglichkeiten die einem da geboten werden. Die einfachen Copy und Move Befehle bekomme ich schon recht gut hin, aber sobald es um Schleifen geht, beginne ich zu schwanken. Mein aktuelles Problem habe ich bereits im Vorwort erläutert. Ich wäre froh, wenn mir da einer auf die Sprünge helfen könnte.
Die Verzeichnisstruktur sieht folgendermaßen aus:
A
B
Bauer
Bauer Klaus
Beier
Behrens
C
D
.
.
.
Ziel ist es die Ordner A-Z zu öffnen und die darin liegenden Verzeichnisse nach beispielsweise den ersten 3 Buchstaben zu prüfen.
Im obrigen Beispiel wäre die Ausgabe dann:
Mögliche Doppelung:
Bauer - Bauer Klaus
Mein erster Ansatz war es das Ganze über 'dir' aufzusetzen. Leider bekomme ich das mit dem 'exclude' nicht wirklich hin. Der Dir-Befehl scheint ja keine Ausklammerungen zu erlauben.
Ab Zeile 21 bin ich irgendiwe ratlos.
Ich würde mich über etwas Hilfe freuen.
Beste Grüße
Der Hans
Ich arbeite an einer Batch mit der ich Unterverzeichnisse auslesen und auf mögliche Doppelungen vergleichen will.
Die möglichen Doppelungen sollen einfach als Echo ausgegeben werden.
Ich bin Batch-Neuling, aber doch recht begeistert von den Möglichkeiten die einem da geboten werden. Die einfachen Copy und Move Befehle bekomme ich schon recht gut hin, aber sobald es um Schleifen geht, beginne ich zu schwanken. Mein aktuelles Problem habe ich bereits im Vorwort erläutert. Ich wäre froh, wenn mir da einer auf die Sprünge helfen könnte.
Die Verzeichnisstruktur sieht folgendermaßen aus:
A
B
Bauer
Bauer Klaus
Beier
Behrens
C
D
.
.
.
Ziel ist es die Ordner A-Z zu öffnen und die darin liegenden Verzeichnisse nach beispielsweise den ersten 3 Buchstaben zu prüfen.
Im obrigen Beispiel wäre die Ausgabe dann:
Mögliche Doppelung:
Bauer - Bauer Klaus
Mein erster Ansatz war es das Ganze über 'dir' aufzusetzen. Leider bekomme ich das mit dem 'exclude' nicht wirklich hin. Der Dir-Befehl scheint ja keine Ausklammerungen zu erlauben.
Ab Zeile 21 bin ich irgendiwe ratlos.
:BESTANDSKONTROLLE
set anfangsbuchstabe=A
set exclude=0
set zielverz=test
:start
cd\
d:
cd %zielverz%\%anfangsbuchstabe%
For /F %%i in ('dir /B /O:-N * ^2^>nul') do set erste=%%i
GOTO STARTZWEI
:STARTZWEI
set suchstrg=%erste:~0,3%
For /F %%i in ('dir /B /O:N %suchstrg%* ^2^>nul') do set zweite=%%i
if x%zweite%==x GOTO FEHLER
if %zweite%==%erste% GOTO VGLFORTSETZEN
echo %erste% --- %zweite%
goto VGLFORTSETZEN
:VGLFORTSETZEN
set exclude=%erste%
dir /b /O:-N "%~1" | findstr /v /i "\<%exclude%\>" do set erste
if "%~1" neq "" goto VGLFORTSETZEN
Ich würde mich über etwas Hilfe freuen.
Beste Grüße
Der Hans
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192512
Url: https://administrator.de/forum/verzeichnisse-auslesen-und-vergleichen-192512.html
Ausgedruckt am: 23.04.2025 um 12:04 Uhr
5 Kommentare
Neuester Kommentar

moin,

sollte das nicht igendwie so aussehen?
anyway...
Nicht wirklich, du hast ne struktur, da steht irgendwo müller drin und willst alles abefrühstücken, ob da nochmal müller oder müh drin ist?
Ab Zeile 21 bin ich irgendiwe ratlos.
Du glücklicher, bei mir ist schon bei Zeile 10 ein Rad los, bzw. mir fehlt was zwischen 11 und zwölf sollte das nicht igendwie so aussehen?
do (
set erste=%%i
call :STARTZWEI
)
goto shell
set erste=%%i
call :STARTZWEI
)
goto shell
anyway...
Mein aktuelles Problem habe ich bereits im Vorwort erläutert.
Nicht wirklich, du hast ne struktur, da steht irgendwo müller drin und willst alles abefrühstücken, ob da nochmal müller oder müh drin ist?
moin HansMeier4,
bei dir hat /b vorrang vor /w - also ist /w nutzlos.
Eine Anleitung für For ist hier auch zu finden, genauso wie eine Anleitung für Variablen.
Die For-Schleife mit der Option /d gibt Dir die Verzeichnisse auch sortiert aus.
Pack die Laufvariable in eine neueVariable.
Prüfe mit der altenVaraible(erste3) gegen neueVariable(erste3) - wenn gleich dann Ausgabe der Laufvariable.
Setze die Laufvariable in eine alteVariable.
Mit find(str) müsstest Du auch die ersten drei auflösen - da ist ein direkter Vergleich aber schneller.
Gruß Phil
bei dir hat /b vorrang vor /w - also ist /w nutzlos.
Eine Anleitung für For ist hier auch zu finden, genauso wie eine Anleitung für Variablen.
Die For-Schleife mit der Option /d gibt Dir die Verzeichnisse auch sortiert aus.
Pack die Laufvariable in eine neueVariable.
Prüfe mit der altenVaraible(erste3) gegen neueVariable(erste3) - wenn gleich dann Ausgabe der Laufvariable.
Setze die Laufvariable in eine alteVariable.
Mit find(str) müsstest Du auch die ersten drei auflösen - da ist ein direkter Vergleich aber schneller.
Gruß Phil