Does %*
in batch file mean all command line arguments?
2 Answers
Yes. According to the official Microsoft documentation:
The %* batch parameter is a wildcard reference to all the arguments, not including %0, that are passed to the batch file.
-
8note: if you have 30 words separated with spaces as argument, you can only take the 9 first words with %i, with i from 1 to 9, but with %* you can take all the 30 words– kokbiraApr 25, 2011 at 20:38
-
6
-
2@TWiStErRob - I'm sure you know it but to be clear... even with %* you need to use shift to access parameters beyond %9. The advantage of using %* is you can pass the entire ORIGINAL parameter list (including parameters that have been "shifted out") to an external batch or other program, or with a
call :label %*
, even if you don't know how many parameters are in the list (or if it's more than 9). Feb 16, 2020 at 22:44 -
4
Besides this, a comment by @kobkira notes that you can take only up to 9 arguments in conventional syntax. Like this if you want to get n number of arguments in separate array style variables, use this syntax:
@echo off & setlocal enabledelayedexpansion & set "n=30"
for /l %%a in (1,1,%n%) do (
for /f "tokens=%%a delims= " %%b in ('echo %*') do (
set "arg[%%~a]=%%~b"
)
)
-
Does array style mean you include indices into variable names? Batch file doesn't support private variables, every assignment exposes variable as environment var... ((– gavenkoaNov 25, 2022 at 22:20