windows and - Wie übergebe ich Befehlszeilenparameter an eine Batch-Datei?




7 Answers

Ein weiterer nützlicher Tipp ist die Verwendung von% * für "alles". Beispielsweise,

echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*

Wenn du rennst:

test-command admin password foo bar

Die obige Batchdatei wird ausgeführt:

fake-command /u admin /p password foo bar

Ich kann die Syntax etwas falsch haben, aber das ist die allgemeine Idee.

write to

Ich muss ID und Passwort zum Zeitpunkt der Ausführung an eine cmd (oder bat) -Datei übergeben, anstatt sie in die Datei zu codieren.

So sieht die Befehlszeile aus:

test.cmd admin [email protected] > test-log.txt



Wenn Sie fehlende Parameter intelligent behandeln möchten, können Sie Folgendes tun:

IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1

:No1
  ECHO No param 1
GOTO End1
:No2
  ECHO No param 2
GOTO End1

:End1



Ja, und vergessen Sie nicht, Variablen wie %%1 verwenden, if und for und die Bande verwenden.

Wenn Sie das Double % vergessen haben, werden Sie in (möglicherweise Null) Befehlszeilenargumente ersetzen und Sie werden einige ziemlich verwirrende Fehlermeldungen erhalten.




@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue

Hinweis: Wenn "%1"=="" Probleme verursacht, wird %1 in Anführungszeichen eingeschlossen.

Verwenden Sie in diesem Fall IF [%1]==[] oder in NT 4 (SP6) und später nur IF "%~1"=="" .




Lass uns das einfach halten.

Hier ist die .cmd Datei.

@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%

Hier sind 3 Aufrufe von der Kommandozeile.

C:\Users\joeco>echo_3params 1abc 2 def  3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def

C:\Users\joeco>echo_3params 1abc "2 def"  "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"

C:\Users\joeco>echo_3params 1abc '2 def'  "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'

C:\Users\joeco>



Ich schrieb ein einfaches Skript read_params, das als Funktion (oder externe .bat ) aufgerufen werden kann und alle Variablen in die aktuelle Umgebung einfügt. Die ursprünglichen Parameter werden nicht geändert, da die Funktion mit einer Kopie der ursprünglichen Parameter call wird.

Zum Beispiel mit dem folgenden Befehl:

myscript.bat some -random=43 extra -greeting="hello world" fluff

myscript.bat könnte die Variablen nach dem Aufruf der Funktion verwenden:

call :read_params %*

echo %random%
echo %greeting%

Hier ist die Funktion:

:read_params
if not %1/==/ (
    if not "%__var%"=="" (
        if not "%__var:~0,1%"=="-" (
            endlocal
            goto read_params
        )
        endlocal & set %__var:~1%=%~1
    ) else (
        setlocal & set __var=%~1
    )
    shift
    goto read_params
)
exit /B

Einschränkungen

  • Argumente können nicht geladen werden, z. B. -force . Sie könnten -force=true aber ich kann mir keine Möglichkeit -force=true , leere Werte zuzulassen, ohne vorher eine Liste von Parametern zu kennen, die keinen Wert haben.

Änderungsprotokoll

  • 18/18/2016
    • Es ist keine verzögerte Erweiterung mehr erforderlich
    • Arbeitet jetzt mit anderen Befehlszeilenargumenten, indem nach - before Parametern gesucht wird.



Erstellen Sie eine neue Stapeldatei (Beispiel: openclass.bat) und schreiben Sie diese Zeile in die Datei:

java %~n1

Dann legen Sie die Batch-Datei in, sagen wir, den Ordner system32, gehen Sie zu Ihrer Java-Klassendatei, klicken Sie mit der rechten Maustaste, Eigenschaften, Öffnen mit ..., dann finden Sie Ihre Batch-Datei, wählen Sie es aus und das ist ...

Für mich geht das.

PS: Ich kann keine Möglichkeit finden, das Cmd-Fenster zu schließen, wenn ich die Java-Klasse schließe. Zur Zeit...




Related

windows batch-file command-line cmd