Wie bekomme ich eine Windows-Batch-Datei, um sich selbst zu aktualisieren?

8

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?

    
Moe Sisko 19.06.2013, 00:58
quelle

5 Antworten

3

Sie können die Kopie als letzte Operation ausführen, indem Sie den Befehl start verwenden, um sie von einem anderen Terminal aus zu starten. Überprüfen Sie dieses Beispiel, insbesondere die letzten Zeilen.

%Vor%     
br araujo 19.06.2013, 01:57
quelle
5
%Vor%

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.

    
Magoo 19.06.2013 03:03
quelle
4

Dazu müssen folgende Voraussetzungen erfüllt sein:

  • Das Überschreiben der Batch-Datei für die neuere Version von sich selbst muss der letzte Befehl der Batch-Datei sein, daher muss der nächste Befehl nach dem copy ein exit /B oder exit sein.
  • Vorherige Befehle müssen im Speicher geladen werden, bevor sie ausgeführt werden. Dies geschieht einfach durch Einschließen in Klammern.

Das ist:

%Vor%     
Aacini 19.06.2013 02:50
quelle
3
%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

    
Samy Bencherif 19.06.2013 03:01
quelle
2

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

    
Chintana Meegamarachchi 19.06.2013 01:27
quelle

Tags und Links