dertiger
Goto Top

Variable aus Batch an aufrufende Batch zurückgeben

Von einer Batch datei weitere Batchdateien aufrufen und eine Variable von der aufgerufenen an die aufrufende Batch zurückgeben

Hi,

ich schreibe mir grad ein kopierscript das mehrere dinge gleichzeitig kopieren soll und dabei den jeweiligen status zurückgeben soll. das ganze möchte ich über variablen zurückgeben. sieht dann in etwa so aus:

Datei1: startet kopiervorgang

@echo off
set var1=default
set var2=default
set var3=default
set var4=default
set var5=default

call set5
start set4.bat
start call set3.bat
start /wait set2.bat
start /wait call set1.bat

rem hier würde dann der status der kopiervorgänge überprüft werden
rem ###########################################
pause
echo var1=,%var1% 
echo var2=,%var2% 
echo var3=,%var3% 
echo var4=,%var4%
echo var5=,%var5%
rem ###########################################

pause > nul

Dateien 2,3,4
kopieren sachen

@echo off
set var1=kopiervorgang gestartet
rem xcopy XYZ ASDF
if not errorlevel 1 set var1=kopiervorgang abgeschlossen
exit

aber irgendwie krieg ich blöderweise am ende immer "default" raus,

var1=default 
var2=default 
var3=default 
var4=default
var5=5

weil die variablen wohl nicht übergeben werden ausser bei einem direkten call.
aber ich müsste die vorgänge gleichzeitig starten.

hab wie man sieht auch schon mit start /wait und call herumexperimentiert, bringt mich aber irgendwie nicht weiter. (mit wait könnt ichs ja auch gleich weglassen da er ja sonst auf den kopiervorgang wartet...)

Content-Key: 101976

Url: https://administrator.de/contentid/101976

Printed on: April 19, 2024 at 01:04 o'clock

Member: Biber
Biber Nov 17, 2008, updated at Oct 05, 2012 at 09:36:26 (UTC)
Goto Top
Moin Der Tiger,

wie Du schon richtig zusammenfasst hast:
  • wenn der "Hauptbatch" irgendwelche neuen CMD-Instanzen selbst eröffnet, also mit "CALL childx.bat" sozusagen Kind-Prozesse erzeugt, die sein komplettes Environment übernehmen, dann klappt es ja
  • wenn aber neue unabhängige CMD-Instanzen erzeugt werden über START, dann haben eben diese Instanzen ein vollkommen neues Environment, kann also nicht klappen.

Also geht nur eins von beiden - entweder das gemeinsame Nutzen der gleichen Variablennamen oder aber das parallele Starten mehrerer "Batch-Threads".

Der einzige Workaround mit vertretbarem Aufwand wäre das Schreiben von temporären 1-Zeilen-Dateien durch die "Kind-Bätche" - und der "Vater-Batch" müsste diese 1-Zeiler wieder auslesen und löschen.
Also eigentlich der völlige Verzicht auf Variablen...

Beispiel "Kindx.bat"
@echo off
Echo Kindx %date% %time% kopiervorgang gestartet >%temp%\kind2.log
rem xcopy XYZ ASDF
if not errorlevel 1 Echo Kindx %date% %time% kopiervorgang abgeschlossen >%temp%\kind2.log
exit

"hauptbatch"
.......
:: rem bei 5 per "Start kindx.bat" gestarteten Parallel-Batchen 
FOR /L %%x in (1,1,5) do (
     If exist "%temp%\kind%%x.log" (  
     FOR /F "delims=" %%i in (%temp%\kind%%x.log) do (  
     echo Child%%x=[%%i]
)))
REM .. Statt 
REM echo var1=,%var1%  
REM echo var2=,%var2% 
REM echo var3=,%var3%
REM echo var4=,%var4%
REM echo var5=,%var5%

Grüße
Biber
Member: DerTiger
DerTiger Nov 17, 2008 at 20:01:15 (UTC)
Goto Top
hmm... ja, ich habs fast befürchtet das es darauf hinausläuft.

danke für die antwort. face-smile