CMD-Ergebnis in Variable speichern und diese Variable dann andere Batchdatei übergeben
Hallo Forum,
ich habe ein Problem mit der Übergabe einer Variable von einer in eine andere Batchdatei und würde mich über Eure Hilfe freuen.
Folgendes sollen die Batchdateien machen:
1. Schauen, ob ein Dienst läuft
2a. Wenn er läuft abschalten und eine Mail per Blat versenden
2b. Wenn er nicht läuft starten und eine Mail per Blat versenden
Dabei würde ich gerne die Ergebnisse der Befehle "net start Dienstname" bzw. "net stop Dienstname", also "Dienstname wurde erfolgreich gestartet" bzw. "Dienstname wurde erfolgreich gestoppt" in den Mailbody schreiben lassen. Das könnte ich ja auch manuell in den Mailbody reinschreiben, aber dann weiß ich nicht, ob der Dienst wirklich gestartet/gestoppt wurde.
Hier nun die Batchdateien:
1. Batchdatei zum Dienst starten/stoppen:
@echo off
REM nachsehen, ob der Dienst läuft
net start|find /i "Dienstname"
REM Wenn der Dienst läuft errorlevel ist gleich 0 (also kein Fehler/Error), wenn er nicht läuft errorlevel ist gleich 1 (also Fehler/Error)
If errorlevel 1 (
REM Wenn Fehler (errorlevel=1), also Dienst läuft nicht, dann Dienst starten und Start-Mail versenden
for /f "tokens=*" %%i in ('net start "Dienstname"') do set gestartet=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net start: %gestartet%"
) else (
REM Wenn kein Fehler (errorlevel=0), also Dienst läuft, dann Dienst stoppen und Stop-Mail versenden
for /f "tokens=*" %%i in ('net stop "Dienstname"') do set gestoppt=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net stop: %gestoppt%"
)
2. Und hier die Batchdatei für den Mailversand per Blat, MailOhneAnhang.cmd:
C:\scripts\blat\full\blat.exe -to empaenger@domain.de ^
-f absender@domain.de ^
-u user -pw passwort -server smtp.domain.de ^
-s %1 ^
-body %2%
Die Mails kommen an mit passendem Betreff und im Mailbody steht:"Mailbody: Ergebnis net start" bzw. "Mailbody: Ergebnis net stop", aber die Variable %gestartet% bzw. %gestoppt% wird nicht angezeigt.
Hat jemand einen Rat, woran es liegen könnte?
Vielen Dank schon im Voraus!
ich habe ein Problem mit der Übergabe einer Variable von einer in eine andere Batchdatei und würde mich über Eure Hilfe freuen.
Folgendes sollen die Batchdateien machen:
1. Schauen, ob ein Dienst läuft
2a. Wenn er läuft abschalten und eine Mail per Blat versenden
2b. Wenn er nicht läuft starten und eine Mail per Blat versenden
Dabei würde ich gerne die Ergebnisse der Befehle "net start Dienstname" bzw. "net stop Dienstname", also "Dienstname wurde erfolgreich gestartet" bzw. "Dienstname wurde erfolgreich gestoppt" in den Mailbody schreiben lassen. Das könnte ich ja auch manuell in den Mailbody reinschreiben, aber dann weiß ich nicht, ob der Dienst wirklich gestartet/gestoppt wurde.
Hier nun die Batchdateien:
1. Batchdatei zum Dienst starten/stoppen:
@echo off
REM nachsehen, ob der Dienst läuft
net start|find /i "Dienstname"
REM Wenn der Dienst läuft errorlevel ist gleich 0 (also kein Fehler/Error), wenn er nicht läuft errorlevel ist gleich 1 (also Fehler/Error)
If errorlevel 1 (
REM Wenn Fehler (errorlevel=1), also Dienst läuft nicht, dann Dienst starten und Start-Mail versenden
for /f "tokens=*" %%i in ('net start "Dienstname"') do set gestartet=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net start: %gestartet%"
) else (
REM Wenn kein Fehler (errorlevel=0), also Dienst läuft, dann Dienst stoppen und Stop-Mail versenden
for /f "tokens=*" %%i in ('net stop "Dienstname"') do set gestoppt=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net stop: %gestoppt%"
)
2. Und hier die Batchdatei für den Mailversand per Blat, MailOhneAnhang.cmd:
C:\scripts\blat\full\blat.exe -to empaenger@domain.de ^
-f absender@domain.de ^
-u user -pw passwort -server smtp.domain.de ^
-s %1 ^
-body %2%
Die Mails kommen an mit passendem Betreff und im Mailbody steht:"Mailbody: Ergebnis net start" bzw. "Mailbody: Ergebnis net stop", aber die Variable %gestartet% bzw. %gestoppt% wird nicht angezeigt.
Hat jemand einen Rat, woran es liegen könnte?
Vielen Dank schon im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 229804
Url: https://administrator.de/forum/cmd-ergebnis-in-variable-speichern-und-diese-variable-dann-andere-batchdatei-uebergeben-229804.html
Ausgedruckt am: 23.12.2024 um 02:12 Uhr
6 Kommentare
Neuester Kommentar
Hi,
einen Rat, eine Idee tatsächlich:
Du versuchst innerhalb einer for-loop eine Variable zu setzen und weiterzugeben.
Hier gibt's genaueres dazu:
http://www.robvanderwoude.com/variableexpansion.php
Das wurde hier im Forum auch bereits mehrfach besprochen, wenn ich mich nicht irre.
Aber das ist kein Problem, ich habe selber gerade mal gesucht und keinen Beitrag dazu auf die Schnelle finden können.
Beste Grüße
Dominique
einen Rat, eine Idee tatsächlich:
Du versuchst innerhalb einer for-loop eine Variable zu setzen und weiterzugeben.
Hier gibt's genaueres dazu:
http://www.robvanderwoude.com/variableexpansion.php
Das wurde hier im Forum auch bereits mehrfach besprochen, wenn ich mich nicht irre.
Aber das ist kein Problem, ich habe selber gerade mal gesucht und keinen Beitrag dazu auf die Schnelle finden können.
Beste Grüße
Dominique
Hallo torillo!
Wenn die Variablen %gestartet% bzw %gestoppt% keine weitere Funktion haben, kannst Du sie auch gleich einsparen:
Falls das Starten oder Stoppen nicht funktioniert, bekommst Du allerdings keine Ausgabe auf STDOUT (Kanal 1) sondern auf STDERR (Kanal 2) und somit auch keine Mail - daher könntest Du als Alternative jede Ausgabe in eine Datei umleiten und diese als Mailbody verwenden:
Grüße
bastla
Wenn die Variablen %gestartet% bzw %gestoppt% keine weitere Funktion haben, kannst Du sie auch gleich einsparen:
If errorlevel 1 (
REM Wenn Fehler (errorlevel=1), also Dienst läuft nicht, dann Dienst starten und Start-Mail versenden
for /f "tokens=*" %%i in ('net start "Dienstname"^|find "erfolgreich"') do call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net start: %%i"
) else (
REM Wenn kein Fehler (errorlevel=0), also Dienst läuft, dann Dienst stoppen und Stop-Mail versenden
for /f "tokens=*" %%i in ('net stop "Dienstname"^|find "erfolgreich"') do call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net stop: %%i"
)
net start "Dienstname" >Ergebnis.txt 2>&1
bastla