Batch Datei start Argumente auslesen?
Hallo
mal angenommen ich hab die Datei example.bat und rufe sie in der command line mit “example.bat -argument” auf
Wie kann die Datei feststellen on und welches Argument verwendet wurde?
3 Antworten
Mit
%[Argumentnummer]
Können die Parameter ausgelesen werden.
oh je💀👻☠🤭 die "Shifter" sind auferstanden... 🤣🤣🤣🤣🤣🤣
Es geht ganz ohne Shift. Man schaufelt alle Argumente der Batch einfach ohne Zwischenstopp per %* as string-Set in einen "nackten For-Lopp.
Die Laufvariable bekommt einen Parameter nach dem Anderen automatisch zugewiesen. Ganz ohne die Wuselei mit Shift.
Das größte Problem bei Shift ist:
Was einmal mit Shift "weggeschoben" wurde ist nicht mehr Zugreifbar. (Zumindest nicht mit %1)
Der Zugriff mit %* bleibt jedoch erhalten...
Es gibt noch Zahlreiche andere Problemchen... , Schwamm drüber... sift ist Mist!
Hier meine Implementation eines Droptarget:
Dateien auf die Batch ziehen und Fertig...
@echo off
chcp 65001 >nul & rem Umlaute ermöglichen
rem abfragen ob mindestens ein Parameter übegeben wird
if "%~1"=="" (
echo Diese Batch ist ein Droptarget.
echo Markiere eine fast beliebige Menge an Dateien/Ordnern ...
echo ^(Limit: alle Parameter zusammen dürfen die Länge von 8100 Zeichen nicht überschreiten^)
echo ...und ziehe Diese auf diese Batch "%~nx0"
Timeout 20 >nul
exit /b
)
rem hier gehts los...
for %%a in (%*) do (
echo An Dieser stelle würde ich die übergebene Datei verarbeiten...
echo Verarbeite "%%~a" .
echo:
)
pause
Die Sache als Automatische Demo:
@echo off
setlocal enableDelayedExpansion
chcp 65001 >nul & rem Umlaute ermöglichen
rem simuliere Batchaufruf duch den Aufruf einer Subroutine
rem einziger unterschied besteht im aufruf eines Label anstatt einer Datei
rem Die Parameterübergabe ist die gleiche...
rem man kann auch meher als 9 Parameter ohne Shift auswerten!
call :Subroutine_1 1 2 3 Rumpelheinzchen "Blah und Blub" "%Temp%" 7 8 Bommelkopp "Pink Einhorn" 11 12 13 "14 & 15" irgendwas Schluß
echo:
echo named Argument Demo:
call :get_Named_arguments "falsch hier fehlt" der Agumentname -Arg1 1 2 3 Rumpelheinzchen -Arg2 "Blah und Blub" -Arg3 "%Temp%" -MachWas 7 8 Bommelkopp -DerRest "Pink Einhorn" 11 12 13 "14 & 15" irgendwas Schluß
echo:
echo named Argument Demo2:
call :get_Named_arguments -Arg1 1 2 3
pause
exit /b
:::::::::: Hauptprogramm endet hier :::::::::::::::::::
:Subroutine_1
rem %* übergibt die gesammte Komandozeile in einem Rutsch
rem KomandozeilenElemente aufteilen und Anzeigen
for %%a in (%*) do (
rem Zähler
set /a "counter+=1"
rem Werte aus der Kommandozeile Speichern
echo !counter!. Element = %%~a
)
exit /b
:get_Named_Arguments
rem falls am anfang kein Bezeichner da ist? ...abfangen!
rem Das ganze ist noch Verbesserungswürdig... aber wollte s simpel halten
set "arg=%%~a"
if "!arg:~0,1!" neq "-" ( set "NamedArg=-Unbekant = " )
for %%a in (%*) do (
rem 1. Zeichem auf "-" prüfen
set "arg=%%~a"
if "!arg:~0,1!"=="-" (
rem zuvor gebastelte Zeichenkette anzeigen
echo !NamedArg!
rem Zeichenkette beginnen
set "NamedArg=%%a = "
) else (
rem weitere Begriffe anfügen
set "NamedArg=!NamedArg! %%a"
)
)
rem da die Ausgabe vom "-" abhängt muss das letzte "Bündel" noch extra angezeigt werden...
echo !NamedArg!
exit /b
ups 3 kleine Fehlerchen...
....
:get_Named_Arguments
rem hier...
set "arg=%~1"
if "%arg:~0,1%" neq "-" ( set "NamedArg=-Unbekant = " )
for %%a in (%*) do (
set "arg=%%~a"
if "!arg:~0,1!"=="-" (
rem hier
if defined NamedArg echo !NamedArg!
rem Zeichenkette beginnen
set "NamedArg=%%a = "
) else (
set "NamedArg=!NamedArg! %%a"
)
)
rem hier
if defined NamedArg echo !NamedArg!
set "NamedArg="
exit /b
....
Auf die ersten 8 Argumente kannst du folgendermaßen zugreifen:
echo.%1
echo.%2
echo....
echo.%9
Im nullten Parameter %0 ist der Pfad der aktuellen Batch enthalten.
Um auf weitere Parameter zuzugreifen (%10 wäre nämlich der Inhalt des ersten Arguments und eine 0), kannst du `shift` verwenden:
:Loop
IF "%1"=="" GOTO Continue
echo.%1
SHIFT
GOTO Loop
:Continue
echo. Alle Parameter ausgegeben.
pause
Weitere Infos zu shift erhältst du, wenn du in cmd `shift /?` eingibst.
Allgemeine, umfassendere Informationen zu Parametern findest du z.B. hier: https://www.robvanderwoude.com/parameters.php
Leichenfledderer!😁😆😆 Mit Shift haben wir uns unter Dos gequählt seit NT4 gehts mit %* in der Schleife