z.B. Ich möchte eine Windows-Stapeldatei ausführen, sagen Sie upgrade.bat, die eine Reihe von Dateien aus einem Quellverzeichnis in das Verzeichnis kopiert, in dem sich die Stapeldatei befindet. Problem ist, dass eine der kopierten Dateien möglicherweise eine neuere Version des Upgrades ist. bat, so dass die Batchdatei sich selbst überschreibt, während sie noch läuft.
Dies scheint zu einem unvorhersehbaren Verhalten bei der Ausführung der Batch-Datei zu führen. Daher möchte ich das Kopieren über eine noch laufende Batch-Datei vermeiden. Idealerweise möchte ich, dass die vorhandene Version von upgrade.bat ausgeführt wird, bis sie beendet ist, und das nächste Mal die neue Version ausführen. Gibt es (einfache) Möglichkeiten, dies zu erreichen?
Diese Zeilenfolge am Anfang von upgrade.bat
sollte funktionieren.
Sehen Sie, ob wir von einer Kopie in %temp%
ausgehen. Wenn nicht, kopieren Sie diese Datei in temp & amp; führe es von dort aus.
Daher läuft der Batch tatsächlich von %temp%
und die ursprüngliche Version kann überschrieben werden.
Dazu müssen folgende Voraussetzungen erfüllt sein:
copy
ein exit /B
oder exit
sein. Das ist:
%Vor%Dies würde einen neuen cmd-Prozess starten und die aktuelle Batch-Datei durch "C: \ somepath \ upgrade.bat" ersetzen und die Batch-Datei neu starten
Wäre es möglich, jede neue Version der Batch-Datei mit einem Versions-Suffix zu versehen und eine zweite Batch-Datei als Startprogramm zu verwenden?
Angenommen, Sie sind beispielsweise eine Payload-Batch-Datei upgrade.bat . Nachfolgende Versionen erhalten den Namen upgrade_001.bat, upgrade_002.bat, upgrade_003.bat .. oder upgrade_201305122134 (Suffix ist yyyymmddHHMM). Die neue Stapeldatei launcher.bat sucht nach der neuesten Stapelaktualisierungsdatei, indem sie nach der Datei mit dem höchsten Suffix sucht und sie ausführt
Tags und Links batch-file