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, 3040 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell Verzeichnisse vergleichen mit Zwischenschritt (22)

Frage von H41mSh1C0R zum Thema Batch & Shell ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen (3)

Frage von s0m3ting zum Thema Windows Server ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...