2011-02-02 5 views
15

W moim pliku wsadowym chcę przekazać wiele parametrów do innej aplikacji.Jak przekazywać wiele par w pakiecie?

Teraz robię to

app.exe %1 %2 

i może przechodzić tylko dwa parametry, ale chcę przekazać wszystkie parametry, które są przekazywane do partii (wolałbym nie pisać % 1% 2% 3 % 4 ...)

Czy jest jakiś magiczny sposób na zrobienie tego?

Odpowiedz

35

Istnieje magiczny sposób! Wiedziałem o tym, ale nie mogłem tego pamiętać.

jego %*

3

Można użyć SHIFT szybką i pętlę poprzez argumenty. Oto przykładowy przykład, w którym można zastąpić ostatnie zapytanie ECHO podpisem, aby załadować aplikację.

@ECHO OFF 

SET PARAMS= 

:_PARAMS_LOOP 

REM There is a trailing space in the next line; it is there for formatting. 
SET PARAMS=%PARAMS%%1 
ECHO %1 
SHIFT 

IF NOT "%1"=="" GOTO _PARAMS_LOOP 

ECHO %PARAMS% 

PAUSE 

Może to być przydatne, jeśli potrzebujesz jakiegoś dynamicznego liczenia parametrów lub jeśli chcesz wyłączyć określony parametr.

+0

+1 tylko byłoby umieścić pusty czek parametru * przed * przetwarzania parametru. –

3

Innym sposobem jest użycie jednego podwójnego parametru. Podczas wywoływania drugiej aplikacji wystarczy użyć urządzenia %~N w wierszu poleceń, aby usunąć cytaty.

Jeśli niektóre parametry, które mają zostać przesłane do aplikacji, są podwójne, znaki cudzysłowu muszą zostać powtórzone dwukrotnie.

Oto skrypt ilustracja, która wykorzystuje pierwszy parametr jako nazwy aplikacji, a drugi jako lista parametrów połączonego aby przejść do aplikacji:

@ECHO OFF 
CALL %1 %~2 

Oto przykładowe wywołanie skryptu dla różnych przypadków (przesuń jeden parametr lub kilka parametrów lub podane parametry).

  1. przetrwa 1 parametr app:

    C:\>mybatch.bat app.exe "app_param" 
    C:\>mybatch.bat app.exe app_param 
    
  2. przejść przez kilka parametrów:

    C:\>mybatch.bat app.exe "app_param1 app_param2 app_param3" 
    
  3. Przepuścić parametr, który zawiera przestrzeń (a więc muszą być podawane)

    C:\>mybatch.bat app.exe """parameter with spaces""" 
    
  4. Połączona przykład: niektóre parametry są z przestrzenią, a inne nie są:

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param"