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-Key: 27899

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

Printed on: April 26, 2024 at 18:04 o'clock

Member: ITwissen
ITwissen Mar 10, 2006 at 16:11:22 (UTC)
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.
Member: Schirrmeister
Schirrmeister Mar 10, 2006 at 20:55:58 (UTC)
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
Member: promis
promis Mar 13, 2006 at 08:26:08 (UTC)
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