Windows DOS-commands mit erfolgsabfrage?

ChillerT

Cadet 4th Year
Registriert
Apr. 2011
Beiträge
124
Hallo,

ich möchte mit eine .bat-Datei erstellen um diverse Aufgaben zu vereinfachen.

Dazu gehören unter anderem commands wie:
Code:
:go to current directory
cd /d %~dp0

:install server
dbserver.exe /INSTALL

:start service
net start webclient

:add ports to firewall
netsh advfirewall firewall add rule name="openMySQL" dir=in action=allow protocol=TCP localport=3306,3307

Ist es hier möglich innerhalb der .bat-Datei den Erfolg dieser Commands abzufragen und dementsprechend Erfolgs oder Fehlermeldungen auszugeben?
Ich bin mir nicht sicher ob das mit .bat-Dateien geht oder ob man dafür ein kompiliertes miniprogramm schreiben muss.

Ich danke euch im Voraus :)
 
ChillerT schrieb:
ich möchte mit eine .bat-Datei erstellen um diverse Aufgaben zu vereinfachen.
Komm in Die Zukunft :)
Es gibt seit 2006 die Powershell und seit 2016 kommt Windows mit Bash klar. Die sind angenehmer, du hast viel mehr Hilfsmittel und Funktionalität und so.

Wenn du eh schon etwas neu schreibst, warum machst du es dir dann unnötig schwer?

Sonst schau mal, obs da was in richtung automatischer variablen Gab. So sollte das unter Windows heissen

und.. woher kommt die dbserver.exe ? muss man die vorher von hand in den ordner legen, order wird die aktuell gehalten?
waere es nicht sinnvoll, sowas ueber eine Paketverwaltung zu machen?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Der Lord, PHuV und derlorenz
In der Batch Datei kann man ja den guten alten %ERRORLEVEL% abfragen. Ob der korrekt gesetzt wird, musst du mal beim einzelnen ausführen der befehle testen.

Aber ich bin hier auch ganz bei madmax, dass man sowas heute eher über powershell machen kann, da auch das error handing deutlich besser ist.
 
  • Gefällt mir
Reaktionen: madmax2010
ChillerT schrieb:
ich möchte mit eine .bat-Datei erstellen um diverse Aufgaben zu vereinfachen.
Für was? Wenn Du immer wieder einen neue Testumgebung brauchst, geht das mit Containern wie Docker, VMs und Co. besser, Softwareverteilung per Ansible, Puppet und Co.
 
  • Gefällt mir
Reaktionen: madmax2010
Wenn du es etwas kürzer haben willst, kannst du auch ohne IF %ERRORLEVEL% ... und mit && und || arbeiten.

Dazu muss man eigentlich nur folgende Dinge wissen:

In deinem Fall wäre also sowas in der Art möglich (leider ungetestet, hab kein Windows :-)):

Code:
:go to current directory
cd /d %~dp0 || (echo "failed to change directory" && pause && exit 1)

:install server
dbserver.exe /INSTALL || (echo "could not install db server" && pause && exit 2)

:start service
net start webclient || (echo "could not net start webclient" && pause && exit 3)

:add ports to firewall
netsh advfirewall firewall add rule name="openMySQL" dir=in action=allow protocol=TCP localport=3306,3307 || (echo "could not add ports to firewall" && pause && exit 4)

echo "all ok" && pause && exit 0

Das pause kannst du natürlich weglassen, allerdings siehst du dann beim Ausführen die Fehlermeldung nur extrem kurz und das Fenster geht zu.

Ich würde aber auch der Empfehlung der anderen folgen und für die Aufgaben ein PowerShell Script schreiben, das ist weitaus flexibler.
 
Nicht so schick wie mein Vorredner, aber wartungsfreundlicher und lesbarer, hier eine Standard-Prüfung :

Code:
cd /d %~dp0
if not "%ERRORLEVEL%" == "0" (
  echo Fehler: Exit Code %ERRORLEVEL%.
  pause
  exit /b 1
)

Allerdings muss der Exit Code vom Befehl/Programm gesetzt werden. Einige tun das nicht, auch MS ist da inkonsistent.
 
Zurück
Oben