1437 Stimmen

Wie kann ich Argumente an eine Batch-Datei übergeben?

Ich muss eine ID und ein Kennwort zum Zeitpunkt der Ausführung an eine Stapeldatei übergeben, anstatt sie fest in die Datei zu kodieren.

So sieht die Befehlszeile aus:

test.cmd admin P@55w0rd > test-log.txt

9 Stimmen

Zum "ganzen Rest" siehe den Kommentar von Greg Hegill unter Wie erhalte ich die Parameter einer Batchdatei ab der n-ten Position?

0 Stimmen

Ich habe ein Umgebungsstartskript, das meinen Benutzernamen und mein Passwort in Umgebungsvariablen überträgt, damit ich sie nicht jedes Mal neu eingeben muss... Ich benutze die meiste Zeit Bash (Linux, Mac und Windows), und muss es für Proxy-Konfigurationen in Skripten usw. für die Arbeit verwenden.

65voto

Frank Krueger Punkte 67044

Ja, und vergessen Sie nicht, Variablen zu verwenden wie %%1 bei Verwendung von if y for und die Bande.

Wenn Sie das Doppel vergessen % dann werden Sie (möglicherweise ungültige) Befehlszeilenargumente einfügen und einige ziemlich verwirrende Fehlermeldungen erhalten.

0 Stimmen

%% ist nur für if y for ?

31 Stimmen

Es ist noch schlimmer - %% wird als Präfix für Variablen und Befehlszeilenparameter verwendet innerhalb Batch-Dateien. Wenn Sie diese Befehle jedoch in der Befehlszeile verwenden, geben Sie nur % als Präfix an. Beispiel: innerhalb von Batch: for %%d in (*) do echo %%d von der Kommandozeile aus: for %d in (*) do echo %d

14 Stimmen

@SteveMidgley Ich habe Ihren Kommentar schon vor einem Jahr oder so hochgestuft. Dann habe ich ihn prompt vergessen, und erst heute habe ich ihn ausprobiert und verwirrt auf meine for-Schleife in der Befehlszeile gestarrt und mich gefragt, warum sie furzt und sonst nichts tut. Hier ist also ein weiteres virtuelles Upvote von mir. Ich werde in einem Jahr oder so wiederkommen, wenn ich wieder auf das gleiche Problem stoße.

56voto

DearWebby Punkte 591

Es gibt keinen Grund, es zu komplizieren. Es ist einfach der Befehl %1 %2 Parameter, zum Beispiel,

@echo off

xcopy %1 %2 /D /E /C /Q /H /R /K /Y /Z

echo copied %1 to %2

pause

Die "Pause" zeigt an, was die Batch-Datei getan hat, und wartet darauf, dass Sie die ANY-Taste drücken. Speichern Sie die Datei unter dem Namen xx.bat im Windows-Ordner.

Geben Sie dazu zum Beispiel ein:

xx c:\f\30\*.* f:\sites\30

Diese Batch-Datei kümmert sich um alle notwendigen Parameter, wie z. B. das Kopieren nur von Dateien, die neuer sind, usw. Ich habe sie schon vor Windows benutzt. Wenn Sie die Namen der Dateien sehen wollen, während sie kopiert werden, lassen Sie das Q Parameter.

43voto

i Mr Oli i Punkte 373

Alle haben mit sehr komplexen Antworten geantwortet, aber eigentlich ist es ganz einfach. %1 %2 %3 und so weiter sind die Argumente, die in die Datei geparst werden. %1 ist Argument 1, %2 ist Argument 2 und so weiter.

Wenn ich also ein Bat-Skript habe, das dies enthält:

@echo off
echo %1

und wenn ich das Batch-Skript ausführe, gebe ich Folgendes ein:

C:> script.bat Hello

Das Skript gibt dies einfach aus:

Hello

Dies kann für bestimmte Variablen in einem Skript sehr nützlich sein, z. B. Name und Alter. Wenn ich also ein Skript wie dieses habe:

@echo off
echo Your name is: %1
echo Your age is: %2

Wenn ich dies eingebe:

C:> script.bat Oliver 1000

Ich erhalte die folgende Ausgabe:

Your name is: Oliver
Your age is: 1000

3 Stimmen

Tolle Antwort. Prägnant und leicht nachvollziehbar.

38voto

The Godfather Punkte 825

In der Batch-Datei

set argument1=%1
set argument2=%2
echo %argument1%
echo %argument2%

%1 y %2 geben den Wert des ersten bzw. zweiten Arguments zurück.

Und in der Kommandozeile übergeben Sie das Argument

Directory> batchFileName admin P@55w0rd 

Die Ausgabe wird sein

admin
P@55w0rd

33voto

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

Anmerkung: IF "%1"=="" wird Probleme verursachen, wenn %1 selbst in Anführungszeichen gesetzt ist.

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

0 Stimmen

Das ist wahr, aber es berührt kaum das Thema.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X