Stapelspiele

Um meinen Heim- und Arbeits-PC synchron zu halten, verwende ich ein Speichermedium.

Mit zwei Batch-Dateien kann ich festlegen, ob das Medium oder der PC angepasst werden soll.

Nach dem Durchlauf der Batch wird das Speichermedium durch Uwe SiebersEjectMedia ausgeworfen.

Um die Daten bestimmter Programme synchron zu halten ist es nötig, diese Programme zu beenden und neu zu starten.

Wenn also z.B. mein Email-Programm TheBat läuft, wird es von der Batchdatei beendet und nach dem Kopieren der Daten wieder gestartet.

Dumm nur ist, dass sich das Speichermedium nicht mehr auswerfen lässt, wenn man ein Programm von ihm aus gestartet hat. Wenn ich also aus der Batch meines Speichermediums „D:\InterNET\TheBat.exe“ starte, kann ich das Medium nicht auswerfen, weil das Startverzeichnis von TheBat.exe auf diesem Medium liegt.

Nach einigem Puzzeln habe ich dann doch eine einfache Lösung gefunden. Damit ich die nicht vergesse, schreibe ich sie hier auf:

set WasKilled= && taskkill /F /IM TheBat.exe 1>NUL 2>NUL && set WasKilled=1

rem Sync Folders...

if "%WasKilled%"=="1" pushd D:\\InterNET\\TheBat && start Thebat.exe && popd

Mit ein wenig Text drumherum sieht es so aus:

rem --------------------------------------------------------------------------
rem 1. Wie beendet man aus einer Batch ein Programm und startet es nur dann
rem    wieder, wenn es wirklich beendet wurde?
rem
rem 2. Man kann ein Speichermedium nur auswerfen, wenn kein laufendes
rem    Programm aus einem Ordner dieses Mediums gestartet wurde.
rem    Deshalb muss das Programm aus seinem Programmordner gestartet werden.
rem    Damit die batch danach weiter läuft muss man nach dem Programmstart
rem    zum Batch-Verzeichnis zurück wechseln
rem --------------------------------------------------------------------------
rem in %1 wird der volle Pfad des Programms übergeben.
rem --------------------------------------------------------------------------

rem ...MachIrgendWasStapeliges...

@set WasKilled= && taskkill /F /IM %~nx1 1>NUL 2>NUL && set WasKilled=1
rem In der Variable WasKilled wird gespeichert, ob der Prozess beendet wurde
rem und deshalb wieder gestartet werden muss. Wenn TaskKill Erfolg hat,
rem gibt es 0 zurück und WasKilled wird 1.

rem ...Dateien und Ordner synchronisieren...

rem wenn das Programm beendet wurde muss es neu gestartet werden
@if "%WasKilled%"=="1" pushd %~dp1 && start %1 && popd
rem "pushd %~dp1" wechselt in den Programmordner.
rem Wenn das geklappt hat, wird mit "start %1" das Programm gestartet. "start"
rem ist notwendig, damit die Batch an dieser Stelle NICHT stehen bleibt.
rem "popd" kehrt zum Batchverzeichnis zurück.

rem ...hier kommen weitere Befehle...

rem --------------------------------------------------------------------------
rem Hinweise:
rem aus "%~nx1" wird <name.ext> des ersten Kommandozeilenparameters
rem aus "%~dp1" wird <laufwerk>\\<ordner> des ersten Kommandozeilenparameters
rem "1>NUL" leitet die Ausgabe nach NUL um und schaltet so Meldungen ab.
rem "2>NUL" leitet die Fehler-Ausgabe nach NUL um.

Einen Kommentar schreiben

Time limit is exhausted. Please reload the CAPTCHA.