Does %* in batch file mean all command line arguments?

2 Answers 2


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.

  • 7
    note: 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
    – kokbira
    Apr 25, 2011 at 20:38
  • 5
    @kokbira or you can use shift to access the rest
    – TWiStErRob
    Nov 10, 2014 at 13:38
  • 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
  • 2
    Is this quoted properly, like "$@" in sh?
    – mirabilos
    Jan 4 at 22:31

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"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.