hansmeier4
Goto Top

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.


: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

Content-Key: 192512

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

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 60730
60730 Oct 10, 2012 updated at 08:09:26 (UTC)
Goto Top
moin,

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 face-wink

sollte das nicht igendwie so aussehen?

do (
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?
Member: HansMeier4
HansMeier4 Oct 10, 2012, updated at Oct 11, 2012 at 20:56:09 (UTC)
Goto Top
Hallo,

Deine Vermutung ist vollkommen richtig.
Ich möchte aus müller das mül auslesen und schauen ob es noch ein Wort mit diesen Anfangsbuchstaben gibt.

Leider sind mir im Code noch einige Nachlässigkeitsfehler unterlaufen.
Sory für die Sauerei.
- in zeile 15 müßte es 'suchstrg' heißen
- in zeile 17 fehlt ein % hinter 'zweite'


Aber meine Intention war es einmal mit dem dir-befehl von unten nach oben durchzugehen und das erste Verzeichnis %erste% abzuholen.
Dann von oben nach unten mit dem Filter %suchstrg% durchzuwandern und schauen was ich finde. --> %zweite%
Wenn %erste% und %zweite% gleich sind, will ich zum nächsten Verzeichnis :vglfortsetzen
Wenn %erste% und %zweite% nicht gleich sind, haben sie dennoch die selben Anfangsbuchstaben --> echo %erste% und %zweite% --> dann :vglfortsetzen

Und genau da liegt grade mein Problem.
Ich weiß noch nicht, wie ich mit dieser Vorgehensweise einmal erkannte Verzeichnisse aus der Suche ausschließen kann.

Besten Dank für Dein Bemühen
Member: pieh-ejdsch
pieh-ejdsch Oct 10, 2012 updated at 21:21:11 (UTC)
Goto Top
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
Member: HansMeier4
HansMeier4 Oct 11, 2012 at 20:58:38 (UTC)
Goto Top
Hallo Phil,

Danke für den Tip mit der Schleife.
Ich werde mich da mal reinhängen und schauen was sich machen läßt.
Ich meld mich dann wieder.

Beste Grüße
Der Hans
Member: HansMeier4
HansMeier4 Oct 19, 2012 at 21:36:32 (UTC)
Goto Top
Servus,

Danke für die Hinweise.
Ich hab's doch hinbekommen.
Anbei der Codeschnipsel:

:AUSLESEN
for /d %%i IN ("*") DO (  
set /a count=!count!+1
set name!count!=%%i
)

:VORBEREIT
set /a zaehler=%count%
set /a count=0

:AUSWERT
set verz1=!name%zaehler%!
set /a zaehler=%zaehler%-1
IF %zaehler%==0 GOTO ENDE
set verz2=!name%zaehler%!
IF %verz1:~0,3%==%verz2:~0,3% echo Achtung: Vermutete Doppelung: %verz1% -- %verz2%
GOTO AUSWERT

Ich werd jetzt nur noch eine Schleife für Unterverzeichnisse einbauen.

So far....
Der Hans