Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Verzeichnisse auslesen und vergleichen

Frage Entwicklung Batch & Shell

Mitglied: HansMeier4

HansMeier4 (Level 1) - Jetzt verbinden

09.10.2012, aktualisiert 10.10.2012, 3041 Aufrufe, 5 Kommentare

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.


01.
:BESTANDSKONTROLLE 
02.
set anfangsbuchstabe=A 
03.
set exclude=0 
04.
set zielverz=test 
05.
 
06.
:start 
07.
cd\ 
08.
d: 
09.
cd %zielverz%\%anfangsbuchstabe% 
10.
For /F %%i in ('dir /B /O:-N * ^2^>nul') do set erste=%%i 
11.
GOTO STARTZWEI 
12.
 
13.
:STARTZWEI 
14.
set suchstrg=%erste:~0,3% 
15.
For /F %%i in ('dir /B /O:N %suchstrg%* ^2^>nul') do set zweite=%%i 
16.
if x%zweite%==x GOTO FEHLER 
17.
if %zweite%==%erste% GOTO VGLFORTSETZEN 
18.
echo %erste% --- %zweite% 
19.
goto VGLFORTSETZEN 
20.
 
21.
:VGLFORTSETZEN 
22.
set exclude=%erste% 
23.
dir /b /O:-N "%~1" | findstr /v /i "\<%exclude%\>" do set erste  
24.
if "%~1" neq "" goto VGLFORTSETZEN
Ich würde mich über etwas Hilfe freuen.

Beste Grüße
Der Hans
Mitglied: 60730
10.10.2012, aktualisiert um 10:09 Uhr
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

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?
Bitte warten ..
Mitglied: HansMeier4
10.10.2012, aktualisiert 11.10.2012
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
Bitte warten ..
Mitglied: pieh-ejdsch
10.10.2012, aktualisiert um 23:21 Uhr
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
Bitte warten ..
Mitglied: HansMeier4
11.10.2012 um 22:58 Uhr
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
Bitte warten ..
Mitglied: HansMeier4
19.10.2012 um 23:36 Uhr
Servus,

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

01.
:AUSLESEN 
02.
for /d %%i IN ("*") DO ( 
03.
set /a count=!count!+1 
04.
set name!count!=%%i 
05.
06.
 
07.
:VORBEREIT 
08.
set /a zaehler=%count% 
09.
set /a count=0 
10.
 
11.
:AUSWERT 
12.
set verz1=!name%zaehler%! 
13.
set /a zaehler=%zaehler%-1 
14.
IF %zaehler%==0 GOTO ENDE 
15.
set verz2=!name%zaehler%! 
16.
IF %verz1:~0,3%==%verz2:~0,3% echo Achtung: Vermutete Doppelung: %verz1% -- %verz2% 
17.
GOTO AUSWERT
Ich werd jetzt nur noch eine Schleife für Unterverzeichnisse einbauen.

So far....
Der Hans
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell Verzeichnisse vergleichen mit Zwischenschritt (22)

Frage von H41mSh1C0R zum Thema Batch & Shell ...

Windows 7
Windows 7 - Anmeldedauer auslesen bzw. Anmeldeperformance (2)

Frage von Affkopf89 zum Thema Windows 7 ...

Heiß diskutierte Inhalte
DSL, VDSL
gelöst DSL 200m verlängern (15)

Frage von Angela44 zum Thema DSL, VDSL ...

LAN, WAN, Wireless
Per Script auf UniFi-controller zugreifen und WPA2-Key ändern (11)

Frage von Winfried-HH zum Thema LAN, WAN, Wireless ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...

Exchange Server
gelöst DHCP Sever MS Server 2012 Problem (10)

Frage von Florian86 zum Thema Exchange Server ...