FAQ: Batch-Dateien
Ich bräuchte ein kleines Programm, das zwei Textdateien vergleicht und anschließend ein anderes – bereits vorhandenes – Programm genau dann startet, wenn die beiden Dateien voneinander verschieden sind.
Antworten auf die wichtigsten Fragen
Dateien vergleichen per Batch
Ich bräuchte ein kleines Programm, das zwei Textdateien vergleicht und anschließend ein anderes – bereits vorhandenes – Programm genau dann startet, wenn die beiden Dateien voneinander verschieden sind.
Das geht recht einfach mit ener Batch-Datei, die auf dem Programm fc basiert: Es lässt sich über verschiedene Optionen, die Sie mit fc /? herausfinden, feinjustieren, aber für einen simplen Textvergleich genügt der nackte Aufruf nach dem Muster fc Datei1 Datei2.
Wie beinahe jedes Kommandozeilenprogramm liefert fc eine Zahl zurück, die über Erfolg oder Misserfolg seiner Ausführung Auskunft gibt und die sich innerhalb der Batch-Datei auswerten lässt. 0 bedeutet immer einen fehlerfreien Lauf; wenn etwas schiefgegangen ist, erhält man eine – je nach Befehl unterschiedlich zu interpretierende – Zahl größer als 0. Im Falle von fc bedeutet eine 1, dass die Dateien unterschiedlich waren, und eine 2 einen Dateifehler, also dass etwa eine der Dateien nicht existierte.
In einer Batch-Datei lässt sich dieses Ergebnis auswerten, indem man unmittelbar nach dem Befehl eine Zeile nach dem Muster
if errorlevel n Befehl
einfügt. Für n muss man eine Zahl einsetzen, und das if sorgt dafür, dass der Befehl genau dann ausgeführt wird, wenn das vorangegangene Kommando ein Ergebnis größer oder gleich dieser Zahl geliefert hat. Mit diesem Wissen ist Ihre Batch-Datei ein Dreizeiler:
@echo off
fc Text1.txt Text2.txt > nul
if errorlevel 1 C:\Programme\TuWas.exe
Das echo off und das > nul unterdrücken störende Textausgaben. Statt Datei- und Programmnamen fest vorzugeben, können Sie natürlich auch %1, %2 und %3 verwenden und die Argumente erst beim Aufruf festlegen.
Batch-Datei als Gerätemanager
Aus Sicherheitsgründen habe ich die Bluetooth-Schnittstelle meines Windows-XP-Notebooks im Gerätemanager deaktiviert und schalte sie nur dann ein, wenn ich sie tatsächlich zum Synchronisieren meines Handys verwende. Mich stören allerdings die vielen Mausklicks, die dazu jedes Mal nötig sind. Kann man das nicht irgendwie per Skript oder Batch-Datei automatisieren?
Mit Windows-Bordmitteln nicht, aber in Artikel 311272 der Microsoft Knowledge Base findet sich ein Programm namens DevCon, das genau das leistet (siehe Link).
Nach dem Auspacken sollten Sie ihm zunächst mit
devcon find *
eine Liste aller installierten Geräte entlocken. Den Windows-internen Gerätenamen Ihres Bluetooth-Adapters übernehmen Sie dann in die Batch-Datei und stellen ihm ein
devcon enable
zum Einschalten beziehungsweise
devcon disable
zum Ausschalten des Bluetooth-Geräts voran.
Indexdienst per Skript anhalten
Ich suche einen bequemen Weg, um die Datei-Indizierung von Windows anzuhalten, während ich bestimmte Programme ausführe. Ich habe herausgefunden, dass ich den Indexdienst über die Computerverwaltung anhalten kann, aber geht das nicht auch mit weniger Klickerei? Den Dienst komplett zu beenden wäre allenfalls eine Notlösung, denn dann steht der Datei-Index auch bei der Suche nicht mehr zur Verfügung.
Alles, was Sie per Mausklick in der Computerverwaltung unter „Dienste“ mit Systemdiensten anstellen können (und noch einiges mehr), kann man auch von der Kommandozeile bewerkstelligen, und zwar mit dem Programm sc. Seine genauen Optionen gibt es aus, wenn man es mit
sc /?
aufruft. Die von Ihnen gesuchten Befehle lauten
sc pause cisvc
um den Indexdienst anzuhalten und
sc continue cisvc
um ihn wieder fortzusetzen. In eine auf dem Desktop abgelegte Batch-Datei verpackt, stehen Ihnen diese Befehle bequem per Doppelklick zur VerfĂĽgung, wenn Sie mal wieder in die Verlegenheit kommen, dem Indexdienst eine Pause verordnen zu mĂĽssen.
Hilfe ohne Umweg
Kann man eigentlich per Kommandozeile direkt zu einer bestimmten Seite einer Windows-Hilfe-Datei (.chm) springen?
Ja, das geht. Der zuständige Befehl lautet hh – für hh.exe, das für das Öffnen von .chm-Dateien zuständige Windows-Programm –, gefolgt von der URL der gewünschten Hilfe-Seite. Die finden Sie heraus, indem Sie sie auf herkömmliche Weise ansteuern und per Rechtsklick in einen leeren Bereich ihre Eigenschaften aufrufen. Meist passt die Adresse nicht ganz sichtbar in das Feld neben „Adresse: (URL)“; die Befehle „Alles auswählen“ und „Kopieren“ aus dessen Kontextmenü verfrachten sie aber komplett in die Zwischenablage. Von da aus können Sie sie zum Beispiel in eine Batch-Datei einfügen, die als einzige Zeile so etwas wie
@hh ms-its:C:\Windows\Help\ntcmds.chm::/net_subcmds.htm
enthält. Das @ vor hh verhindert, dass die Batch-Datei den Befehl noch einmal ausgibt.
Endlosschleife auf der Kommandozeile
In der Windows-Eingabeaufforderung möchte ich den Befehl arp -a alle fünf Sekunden automatisch aufrufen, um zu sehen, wie Einträge im ARP-Cache erscheinen und verschwinden. In einer Batch-Datei würde ich dafür ein Label und den goto-Befehl nutzen, doch das scheint direkt auf der Kommandozeile nicht zu funktionieren.
Auf der Kommandozeile können Sie seit Windows XP mit den neuen Optionen des for-Befehls eine Endlosschleife bauen:
for /L %i in (0,0,0) do @arp -a & ping -n 6 127.0.0.1>nul
Mit /L geben Sie Start- und Endwert sowie die Schrittweite an wie bei der for-Schleife von Programmiersprachen. Hier wird die Variable %i von 0 bis 0 hochgezählt, aber (das ist der Trick für die Endlosschleife) mit der Schrittweite 0.
Hinter Ihrem arp-Befehl folgt noch das, was Microsoft als offizielle Methode zum Vertrödeln von fünf Sekunden empfiehlt. Da ping zwischen zwei Paketen eine Sekunde Pause macht, schickt man einfach sechs Ping-Pakete an das Loopback-Interface und leitet die Ausgabe in den Orkus (nul). Das & zwischen den Befehlen bedeutet für Windows, dass sie nacheinander ausgeführt werden.
(hos)