Verknüpfung mit Aufrufparametern zur Batch und diese dann in der Batch auswerten
Problembeschreibung:
Ich möchte eine Batch via Verknüpfung auf dem Desktop Starten.
In der Verknüpfung sollen Aufrufparameter mit angegeben werden können,
die in der aufgerufenen Batch ausgewertet werden sollen um den Ablauf der Batch zu steuern.
Beispielaufruf: c:\programm.cmd /user:admin /delete
Die Variable %1% in der Batch liefert nun "/user:admin",
%2% bringt "/delete" als Ergebnis.
So lange ich genau diese Reihenfolge in der Verknüpfung einhalte kann ich auch abfragen und vergleichen (if %1%==/delete do...).
Probleme habe ich aber, wenn ich die Parameter vertausche (c:\programm.cmd /delete /user:admin),
oder nur einen Parameter übergebe (c:\programm.cmd /delete)
Hat jemand eine Lösung um Aufrufparameter in Batchdateien elegant auszuwerten?
Ich möchte eine Batch via Verknüpfung auf dem Desktop Starten.
In der Verknüpfung sollen Aufrufparameter mit angegeben werden können,
die in der aufgerufenen Batch ausgewertet werden sollen um den Ablauf der Batch zu steuern.
Beispielaufruf: c:\programm.cmd /user:admin /delete
Die Variable %1% in der Batch liefert nun "/user:admin",
%2% bringt "/delete" als Ergebnis.
So lange ich genau diese Reihenfolge in der Verknüpfung einhalte kann ich auch abfragen und vergleichen (if %1%==/delete do...).
Probleme habe ich aber, wenn ich die Parameter vertausche (c:\programm.cmd /delete /user:admin),
oder nur einen Parameter übergebe (c:\programm.cmd /delete)
Hat jemand eine Lösung um Aufrufparameter in Batchdateien elegant auszuwerten?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 27899
Url: https://administrator.de/contentid/27899
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
3 Kommentare
Neuester Kommentar
Mal abgesehn, dass ein Windows Batch fuer mich keine Programmiersprache ist fuer elegante Konstruktionen, gebe ich mal mein Senf dazu.
:loop
if (%1% ==irgendwas) do set irgendwas=%1%
if (%1%== irgendwasanderes) do set irgendwasanderes=%1%
...
shift
if (%1% == "") do goto ende
goto loop
:ende
Damit kannst du deine Optionen sortieren.
:loop
if (%1% ==irgendwas) do set irgendwas=%1%
if (%1%== irgendwasanderes) do set irgendwasanderes=%1%
...
shift
if (%1% == "") do goto ende
goto loop
:ende
Damit kannst du deine Optionen sortieren.
Ich hab dir da mal was gebastelt, eine Überprüfung der Parameter fehlt natürlich noch.
Ich hoffe es ist selbsterklärend, ansonsten frag einfach nochmal.
Ich hoffe es ist selbsterklärend, ansonsten frag einfach nochmal.
:: vim: ts=4 sw=4 nowrap
::
:: Aufruf:
:: param_test.cmd /opt1 /opt2:value
::
@echo off
:GET_PARAM
for /F "tokens=1,2 delims=:/" %%i in ( "%1" ) do (
call :%%i %%j
)
:: Nächsten Parameter nach %1 holen
shift
:: Noch Parameter da?
if not "%1"=="" goto :GET_PARAM
goto :EOF
:opt1
:: Kein Parameter erwartet
set /A opt1=1
echo %opt1%
goto :EOF
:opt2
:: Parameter erwartet
set opt2=%1
echo %opt2%
goto :EOF