Endlosschleife in einer Batch Datei zum vergleichen von Dateien

Mit Hilfe des For Befehls lassen sich auch Endlosschleifen z.B. zu einem Dateivergleich zusammenbasteln:

for /L %i in (0,0,0) do @fc Datei1.txt Datei2.txt>nul & if errorlevel 1 echo „Änderung“ & ping -n 10 127.0.0.1>nul

OK, zugegeben da stecken fast alle Finessen der Batch-Programmierung drin, aber es ist gar nicht so wild!

for /L %i in (0,0,0) do erstellt die Schleife. %i ist dabei die Variable in der hochgezählt wird. Normaler Weise würde in Klammern beispielsweise stehen (5,1,10). D.h. %i wäre beim 1. Durchlauf 5, beim 2. 6 usw. bis %i dem Wert 10 entspricht. Da wir aber 3 x 0 eintragen beruht darauf der Trick der Endlosschleife. Da durch die mittlere 0 in der Klammer ja nicht hochgezählt wird bleibt %i immer 0 (wegen der ersten Null in der Klammer) und er muss den Befehl immer weiter wiederholen. Wie stoppe ich das nun?! Wie immer (auch bei Befehlen die nicht mehr reagieren)…drücken Sie Strg+C.

Das @ sorgt dafür, dass die Befehlszeile nicht bei jedem Durchlauf angezeigt wird, sondern nur deren Ergebnis.

fc Datei1.txt Datei2.txt >nul vergleicht den Inhalt von Datei1.txt mit dem Inhalt von Datei2.txt, dank >nul wird aber nichts angezeigt. Da keine Pfandangaben gemacht wurden, müssen wird den Befehl in dem Verzeichnis eintippen wo sich die beiden Dateien befinden. Zum testen können Sie sich ja einfach eine ganz normale Textdatei anlegen und 123 als Inhalt reinschreiben und davon eine Kopie machen, die Sie dann Datei2.txt nennen. Dann ist der Inhalt erst einmal identisch.

Das & sorgt dafür, dass direkt im Anschluß (ohne erneut eine Kommandozeile mit Enter zu bestätigen. Dies entspricht dem ; unter Unix bzw. Bash) der nächste Befehl ausgeführt wird.

Durch if errorlevel 1 echo „Änderung“ wird überprüft ob der vorangegangene Befehl (fc) einen Fehler meldet(das tut er, wenn er einen Unterschied in den Dateien feststellt). Wenn die Dateien gleich sind passiert hier erst einmal gar nichts. Nur wenn wird einen Unterschied feststellen und somit einen Fehler bekommen geben wir mittels echo „Änderung“ den Text Änderung am Bildschirm aus.

Noch ein & für einen 3. Befehl innerhalb der Schleife.

Das ping -n 10 127.0.0.1>nul dient einfach nur der Zeitverzögerung, da Windows leider keinen sleep Befehl wie Linux (Bash) kennt. Alternativ könnte man vielleicht den Befehl pause verwenden, da muss man dann aber immer eine Taste drücken :-(. 10 Mal ping sich der PC selbst an (-n 10) und damit das Ergebnis von Ping die Anzeige von nicht weiter stört, werfen wir die Ausgabe mit >nul (entspricht dem Linux >/dev/nul) in den Orcus (Orcus=römischer Gott der Unterwelt=Jenseits). Danach kann der nächste Durchlauf wieder mit einem arp statt finden. Apropos Orcus…kennen Sie auch den Sisyphos? Genau eine solche Arbeit hat Ihr PC gerade bekommen ;-). Interessanter Weise verbraucht das Script recht viel CPU-Rechenzeit wenn die Dateien identisch sind, sobald die Änderung eintritt ist die CPU-Last nicht mehr nennenswert. Wenn Sie Ihre CPU also erlösen möchten ändern Sie doch den Inhalt von einer der beiden Dateien und schauen Sie was passiert.

PS: Wenn Sie den Befehl innerhalb einer Batch-Datei verwenden möchten und nicht direkt auf der Kommandozeile eintippen, schreiben Sie bitte %i als %%i (2x das Prozentzeichen, sonst geht es nicht)!!!


Kommentare

2 Antworten zu „Endlosschleife in einer Batch Datei zum vergleichen von Dateien“

  1. Avatar von Bernd Mosebach
    Bernd Mosebach

    Bei mir würde die Schleife so nicht laufen ist windows 10 . Ich habe i%% gemacht zum laufen am Ende nochmals i%% dann schnurrt sie los die Schleife !!!

    1. Vielen Dank für den Hinweis. Ich würde unter Windows 10, bzw. inzwischen grundsätzlich (egal welches Windows), PowerShell einsetzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert