2016-05-19 4 views
0

Ich habe eine Liste von Ordnern unten aufgeführt:Wie wird die Schleife für kommagetrennte Argumente angewendet, die im Stapel an das Skript übergeben werden?

  • C: \ Program Files
  • C: \ temp
  • C: \ John Snow

ich durch Komma getrennte Argumente zu übergeben haben zu den unten angegebenen Skripten:

script.bat C:\Program Files,C:\temp,C:\John Snow 

Nach dem Passieren des Skripts muss ich co ausfiltern mma getrennt Argument und gelten für jede Schleife und Echo den Wert Argument und dir Befehl Ausführen von Dateien in diesem Regisseur dieses

+0

Sie müssen Argumente in der 'script.bat' durchlaufen oder Skript .bat mit jedem der Elemente aufrufen? – npocmaka

+0

Ich muss Argumente in ** script.bat ** iterieren. Und innerhalb der for-Schleife muss ich DIR-Befehl für jede Argumente ausführen –

+0

Sie können die Liste der Argumente in Anführungszeichen umgeben und auf diese Liste mit% 1 im Skript zugreifen. Von dort können Sie mit einem 'for/f'-Befehl, der", "als Trennzeichen gibt, iterieren. Überprüfen Sie [hier] (http://ss64.com/nt/for_f.html). –

Antwort

1
@ECHO OFF 
SETLOCAL EnableExtensions 
set "_params=%*" 
if not defined _params (
    echo %~nx0: nothing to do 
    pause 
    exit /B 
) 
set "_params=%_params:,=","%" 
for %%G in ("%_params%") do (
    echo dir "%%~G" 
) 

Ausgabe

==> 37321331.bat 
37321331.bat: nothing to do 
Press any key to continue . . . 

==> 37321331.bat C:\Program Files,C:\temp,C:\John Snow 
dir "C:\Program Files" 
dir "C:\temp" 
dir "C:\John Snow" 

==> 

Above Skript erfordert einige Ausarbeitung: es würde scheitern, wenn einige Argument in einem Paar doppelte Anführungszeichen eingeschlossen ist:

==> 37321331.bat C:\Program Files,C:\temp,"C:\John Snow" 
dir "C:\Program Files" 
dir "C:\temp" 
dir ""C:\John" 
dir "Snow""" 

bearbeiten. Verwenden Sie das nächste Code-Snippet, um es zu beheben: set "_params=%_params:"=%" würde alle " doppelte Anführungszeichen aus der angegebenen Zeichenfolge entfernen.

set "_params=%_params:"=%" 
set "_params=%_params:,=","%" 
for %%G in ("%_params%") do (
    echo dir "%%~G" 
) 

Ressourcen (erforderlich Lesen, unvollständig):

+0

Für mich kommt es so: c: \ batch> com.bat "c: \ Programme, c: \ John Snow" dir "" c: \ Programm " dir" Dateien "," c: \ John " dir" Schnee "" " –

+0

@ThejeshPR Dieses Verhalten habe ich bereits ermahnt: Bitte lesen Sie die gesamte Antwort. – JosefZ

+0

Ja, es funktioniert jetzt, ich war Qoutes..Thank Sie –

0
set "args=%*" 
set "args=%args:,=","%" 
for %%# in ("%args%") do (
    dir "%%~#" 
) 

versuchen aufzulisten.

+0

** %% # ** Wert kommt NULL, es zeigt nur aktuelle Verzeichnis-Dateien. –

+0

@ThejeshPR - behoben. – npocmaka

+0

Es kommt wie folgt (ich habe ech dir "%% ~ #"): 'c: \ batch> com.bat" c: \ Programme, c: \ John Snow " dir" "c: \ Programm" dir "Dateien", "c: \ John" dir "Schnee" "" 'Es nimmt Platz als Trennzeichen. –

Verwandte Themen