-pzyco-
Goto Top

Inhalt von zwei Ordnern (und Unterordnern) vergleichen

Problemstellung:
2 Ordner (frei wählbar) sollen miteinander vergleichen werden. Doppelte Dateien sollen in einer Logdatei ausgegeben werden. Der genaue Pfad der Dateien soll angegeben sein. Dateien die den gleichen Namen aber unterschiedliche Eigenschaften haben sollen extra gekennzeichnet werden.

Zur Verfügung steht:
BATCH

Hallo liebe Administratoren,
zu der oben genannten Problemstellung suche ich nun Möglichkeiten das zu realisieren.

SET /P DIR1=Pfad zu Ordner 1:
SET /P DIR2=Pfad zu Ordner 2:
SET /P LOG=Pfad für Logfiles:

ECHO Folgende Dateien wurden mehrfach gefunden: >> %LOG%\compare.log
for /r %DIR1% %%i in (*.*) do call :write1 %%~nxi
goto eof
:write1
if exist %DIR2%\%1 ECHO • %DIR2%\%1 >> %LOG%\compare.log

Das vergleicht zwar schon zwei Ordner, allerdings fehlen noch die Unterordner. Hat jemand eine Idee?

PS: Bitte keine Links zu externen Programmen oder Lösungen mit VB, die Aufgabe lautet "leider" es mit Batch zu realisieren.

Content-ID: 142713

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

Ausgedruckt am: 05.11.2024 um 19:11 Uhr

77559
77559 12.05.2010 um 13:59:49 Uhr
Goto Top
Tja,

du machst es dir ja auch etwas zu einfach.

Die for /r Schleife geht auch in die Unterordner, aber DU übergibst an die :Sub nur den Namen mit Extension; die dazwischenliegenden Unterordner unterschlägst du.
Übergebe den kompletten Namen %%~fi

und speicherin ihn der sub in einer Variable.
In der variable dann den "Dir1" durch "Dir2" ersetzen, das ist dein Zielname,
CAll set Variable=%%Variable:%Dir1%=%Dir2%%%

Gruß
LotPings

edit: da fehlten noch %-Zeichen
-PzYcO-
-PzYcO- 25.05.2010 um 09:07:18 Uhr
Goto Top
Hallo LotPings,

da ich leider nicht genau weiß wohin dieser Teil des Codes gehört wäre ich dir dankbar wenn du den ganzen Codeausschnitt einmal posten könntest.

Danke und Gruß
-PzYcO-
77559
77559 25.05.2010 um 11:07:19 Uhr
Goto Top
Zitat von @-PzYcO-:
da ich leider nicht genau weiß wohin dieser Teil des Codes gehört wäre ich dir dankbar wenn du den ganzen
Codeausschnitt einmal posten könntest.

Du bist dir schon darüber im Klaren das es deine Aufgabe ist ?
Du hattest doch jetzt 13 Tage Zeit, darüber nachzudenken / daran zu arbeiten.

Ich hoffe du gibst auch einen Quellenhinweis, denn auch Lehrer können erkennen das es nicht deine "Handschrift" ist.

@Echo off
CLS
SET /P DIR1=Pfad zu Ordner 1: 
SET /P DIR2=Pfad zu Ordner 2: 
SET /P LOGP=Pfad für Logfiles: 
(Set LOG=^>^>"%LOGP%.\compare.log")  

ECHO Folgende Dateien wurden mehrfach gefunden: %LOG:~1%
for /r "%DIR1%" %%i in (*.*) do call :write1 "%%~fi"  
More %LOG:~2%
goto :Eof
:write1
Set "Zieldatei=%~1"  
CAll set Zieldatei=%%Zieldatei:%Dir1%=%Dir2%%%
If Not exist "%Zieldatei%" goto :eof  
%LOG% ECHO • %~1
%LOG% ECHO • %Zieldatei%
For %%A in (%Zieldatei%
  ) do Set "Attr=%%~aA"&Set "Size=%%~zA"&Set "DaTi=%%~tA"  
If "%~a1" NEQ "%Attr%" %LOG% Echo abw. Attribute %~a1  %Attr%  
If "%~z1" NEQ "%Size%" %LOG% Echo abw. Groesse   %~z1  %Size%  
If "%~t1" NEQ "%DaTi%" %LOG% Echo abw. DatumZeit %~t1  %DaTi%  

Gruß
LotPings

Edit: verlorenes "(" eingesetzt
@Biber, Da unterschätzt du meine Fähigkeit im Codelesen (auch nach 1 Jahr).
Ich hasse geradezu tot kommentierten Code; da kann man keine Strukturen mehr erkennen.
Biber
Biber 25.05.2010 um 11:58:18 Uhr
Goto Top
Moin Psycho,

und noch ein weiterer freundlicher Hinweis ergänzend zu LotPings'
Zitat von @77559:
Ich hoffe du gibst auch einen Quellenhinweis, denn auch Lehrer können erkennen das es nicht deine "Handschrift" ist.
Sollte ich mal wieder im Rahmen einer Projektwoche etwas Sensibilität für Codequalität an einer Schule schaffen wollen...
--> ein Codeschnipsel ohne jegliche Kommentierung kann niemals besser als "ausreichend" bewertet werten.
Obwohl LotPings durchaus "selbst erklärende" Variablennamen verwendet hat und der Schnipsel keine zwei Dutzend Zeilen lang ist,
wird selbst er, wenn er seinen eigenen Code in einem halben Jahr anpassen muss, alles erst vierfach lesen müssen,
bevor er ein "Ach ja, so hatte ich das gedacht.." von sich gibt.

Wenn dein Lehrer sich etwas bei der Aufgabe gedacht hat, dann wird er zwar die formale Lösung ("Schnipsel tut, was er soll") gewichten mit 60%, aber eine strukturierte und nachvollziehbare Herangehensweise und handwerkliche Sorgfalt eben auch mit 40%.

Grüße
Biber

[Edit]
@77559
@Biber, Da unterschätzt du meine Fähigkeit im Codelesen (auch nach 1 Jahr).
Nach meinen Beobachtungen gibt es aber auch einen Unterschied zwischem "eigenen Code wieder nachvollziehen können" und "fremden Code ohne Kommentare verstehen können".
(Abschreckende) Extrembeispiele sind doch immer wieder diese Taschenspielertrick-Codefragmente in den Tankstellen-PC-Zeitschriften....boah..wunderbar kurz, wunderbar geheim und so undokumentiert, dass es fast schon illegal ist. Ja hey! Arbeiten wir Administratoren mehr auf Produktivsystemen oder ausschließlich im Internetcafe?
Ich hasse geradezu tot kommentierten Code; da kann man keine Strukturen mehr erkennen.
Dir ist aber auch noch in Erinnerung, dass zum Beispiel Mathelehrer sehr selten damit zufrieden sind, wenn unter einer Klausuraufgabe zur Volumenberechnung eines load of bollocks einfach nur "3,378 Kubikmeter" ohne nähere Erläuterung geschrieben steht.?

Außerdem...genau genommen habe ich bei keinem der hier aktiven Codeschroter richtige Angst, dass die etwas tot kommentieren könnten.
Okay, wenn die vielleicht so 370 bis 380 Jahre Zeit dafür hätten.... face-wink
[/Edit]
bastla
bastla 25.05.2010 um 17:08:13 Uhr
Goto Top
[OT]
@Biber
genau genommen habe ich bei keinem der hier aktiven Codeschroter richtige Angst, dass die etwas tot kommentieren könnten.
Ich hatte gedacht, nur Du "schrotest" ... face-wink

Grüße
bastla (der sich sowas von in keinster Weise überhaupt gar nicht angesprochen fühlt face-wink - und sonst eigentlich nicht zum Lügen neigt ...)
[/OT]
Biber
Biber 25.05.2010 um 17:15:23 Uhr
Goto Top
[OT] @bastla
Zitat von @bastla:
Grüße
bastla (der sich sowas von in keinster Weise überhaupt gar nicht angesprochen fühlt ... face-wink)
Ich habe neulich auf einem meiner Rechner ein paar Dateien mit der Endung *.bkf gesehen....
Aber keine drei Hunderstel Sekunden überlegt, ob es Dateien in bastlas Kommentar-Format sein könnten...
..die waren alle größer als 0 Byte....face-wink

Grüße
Biber
[/OT]
77559
77559 25.05.2010, aktualisiert am 18.10.2012 um 18:42:16 Uhr
Goto Top
Zitat von @Biber:
Außerdem...genau genommen habe ich bei keinem der hier aktiven Codeschroter richtige Angst, dass die
etwas tot kommentieren könnten.

Ich bin ja mit all dem einverstanden face-wink
Ich habe auch weniger an die Aktiven gedacht, die haben da eh keine für, sondern z.Bsp. an sowas ohne den Autor jetzt besonders hervorheben zu wollen.

Ansonsten gelobe ich Besserung (wenn ich mal Zeit habe) face-wink

Gruß
LotPings
Biber
Biber 25.05.2010, aktualisiert am 18.10.2012 um 18:42:16 Uhr
Goto Top
Moin Lordchen,

Zitat von @77559:

Ich habe auch weniger an die Aktiven gedacht [...],sondern z.Bsp. an sowas ohne den Autor jetzt besonders hervorheben zu wollen.

Jessas! Den Beitrag habe ich heute zum ersten Mal gelesen... und verstehe, was Du meinst. *Luft schnapp*
Es gibt auch für mich Codeschnipsel, bei denen ich nach wenigen Zeilen nur noch den Wunsch verspüre, sofort zu erblinden und für immer das Gedächtnis zu verlieren.
Um es mal vorsichtig auszudrücken.

Aber es ist doch gut, dass wir mal hin und etwas OffTopic (oder eigentlich ganzheitlich) querposten...
... sonst wären solche kleinen Schätze wie dein Link für immer verloren... face-wink

Danke
Biber
-PzYcO-
-PzYcO- 26.05.2010 um 11:45:46 Uhr
Goto Top
Ich glaube ich wurde hier missverstanden. Ich wollte nicht den gesamten Code sondern lediglich wissen an welcher Stelle der komplette Dateiname übergeben werden sollte, da ich nicht wusste was er meinte.

LotPings:
Die for /r Schleife geht auch in die Unterordner, aber DU übergibst an die :Sub nur den Namen mit Extension; die dazwischenliegenden Unterordner unterschlägst du.
Übergebe den kompletten Namen %%~fi

Ich habe das Problem aber inzwischen lösen können.
Trotzdem danke für eure Bemühungen!

PzYcO