promis
Goto Top

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?

Content-ID: 27899

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

Ausgedruckt am: 23.11.2024 um 16:11 Uhr

ITwissen
ITwissen 10.03.2006 um 17:11:22 Uhr
Goto Top
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.
Schirrmeister
Schirrmeister 10.03.2006 um 21:55:58 Uhr
Goto Top
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.
:: 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
promis
promis 13.03.2006 um 09:26:08 Uhr
Goto Top
Vielen Dank euch @ITwissen und @Schirrmeister

Ich habe beide Lösungsmöglichkeiten ausprobiert.
Der Code von Schirrmeister passte super zu meinem Problem und lief auf sofort.

Der thread kann geschlossen werden, es klappt einfach spitze.

Vielen Dank nochmals an euch beide