Você pode usar SHIFT e um loop para percorrer todos os argumentos da linha de comando. Como o SHIFTing consumirá cada argumento, você deverá fazê-lo em uma sub-rotina. A sub-rotina que eu apresento aqui também conta os argumentos, então você sabe quantos passarão depois.
@echo off
set argCount=0
call :GetLastArg %*
REM subtract 1 from arg count, so we know how many to process.
set /a argCount-=1
echo.
echo Arguments to Process: %argCount%
echo Last Argument: %lastArg%
echo.
echo Here are the other arguments:
echo.
:BeginArgProcessingLoop
if %argCount% == 0 goto EndArgProcessingLoop
set /a argCount-=1
echo %1
shift
goto BeginArgProcessingLoop
:EndArgProcessingLoop
goto :eof
REM This subroutine gets the last command-line argument by
REM using SHIFT. It also counts the number of arguments.
:GetLastArg
set /a argCount+=1
set "lastArg=%~1"
shift
if not "%~1"=="" goto GetLastArg
goto :eof
Como usamos SHIFT, esse processo funciona com sua linha de comando original ...
batch.cmd fin.txt "D:\Ref Quotes\*.pdf" ..\*.doc "E:\Jan 2012"
Arguments to Process: 3
Last Argument: E:\Jan 2012
Here are the other arguments:
fin.txt
"D:\Ref Quotes\*.pdf"
..\*.doc
e uma lista de argumentos maior que 9 em número, o que causaria problemas se você usasse% 1 a% 9 ...
batch.cmd fin.txt "D:\Ref Quotes\*.pdf" ..\*.doc manifesto.txt
87.docx "C:\Plans to Rule Earth\*.ppt" "Compromising Photos\*.jpg" "What's Up.do
c" "Gimme All Your Lovin'.mp3" out-of-funny-ideas.xls "E:\Jan 2012"
Arguments to Process: 10
Last Argument: E:\Jan 2012
Here are the other arguments:
fin.txt
"D:\Ref Quotes\*.pdf"
..\*.doc
manifesto.txt
87.docx
"C:\Plans to Rule Earth\*.ppt"
"Compromising Photos\*.jpg"
"What's Up.doc"
"Gimme All Your Lovin'.mp3"
out-of-funny-ideas.xls