Czy istnieje prosty sposób na wykrycie liczby parametrów przekazanych jako argumenty do pliku wsadowego, a następnie wykorzystanie ich for /L
do zapętlenia?
6
%*
w skrypcie wsadowym odnosi się do wszystkich argumentów (np.% 1% 2% 3% 4% 5 ...% 255)
Można użyć %*
do pobrania wszystkich argumentów wiersza poleceń do pliku wsadowego.
Aby policzyć argumenty i pętli z for /L
zobaczyć StackOverflow odpowiedź Batch-Script - iterację argumenty przez aacini :
@echo off setlocal enabledelayedexpansion set argCount=0 for %%x in (%*) do ( set /A argCount+=1 set "argVec[!argCount!]=%%~x" ) echo Number of processed arguments: %argCount% for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"
Ogólnie @DavidPostill ma poprawną odpowiedź. Nie zobaczy
/?
jednak przełączników (i prawdopodobnie kilku innych). Jeśli chcesz je zobaczyć, możesz użyć:for %%x in ("%*") do (
zamiastfor %%x in (%*) do (
. Problem polega na tym, że ta wersja nie widzi niczego w cudzysłowie. Jeśli chcesz wersję, która może obsługiwać obie te funkcje, oto zdecydowanie mniej prosta odpowiedź:Niestety, nie jest to również idealna odpowiedź ze względu na sposób, w jaki musieliśmy wykonać plik z poziomu WSH, StdErr i StdOut są zepsute dla końcowego skryptu. Możesz naprawić StdErr w niektórych sytuacjach, używając
2&>1
na końcu drugiego wywołania wsadowego:var exec=sh.Exec(cmd+" 2&>1");
StdIn będzie musiał być traktowany jako specjalny przypadek dla każdego skryptu.źródło