@echo off
setlocal ENABLEEXTENSIONS
if "%1"=="SOTEST" (
REM tests...
call file.cmd arg1 --unwanted arg3
call file.cmd arg1 arg2
call file.cmd --unwanted
call file.cmd --unwanted arg2
call file.cmd arg1 --unwanted
goto :EOF
)
set params=
:nextparam
if "%~1"=="--unwanted" (shift&goto nextparam)
if not "%~1"=="" (set "params=%params%%1 "&shift&goto nextparam)
echo.%*^>^>%params%
Это печатает:
arg1 --unwanted arg3>>arg1 arg3
arg1 arg2>>arg1 arg2
--unwanted>>
--unwanted arg2>>arg2
arg1 --unwanted>>arg1
Редактировать:
@echo off
setlocal ENABLEEXTENSIONS
if "%~1"=="SOTEST" (
REM tests...
call file.cmd arg1=foo --unwanted arg3=bar
call file.cmd arg1 arg2
call file.cmd --unwanted
call file.cmd --unwanted arg2
call file.cmd arg1 --unwanted
call file.cmd "arg1" --unwanted "arg3"
call file.cmd "arg1=foo" --unwanted arg3="bar"
goto :EOF
)
set var=0
set params=
:nextparam
set /A var=%var% + 1
for /F "tokens=%var% delims= " %%A in ("%*") do (
if not "%%~A"=="--unwanted" set "params=%params%%%A "
goto nextparam
)
echo.%*^>^>%params%
печатает
arg1=foo --unwanted arg3=bar>>arg1=foo arg3=bar
arg1 arg2>>arg1 arg2
--unwanted>>
--unwanted arg2>>arg2
arg1 --unwanted>>arg1
"arg1" --unwanted "arg3">>"arg1" "arg3"
"arg1=foo" --unwanted arg3="bar">>"arg1 foo" arg3="bar"
значение "arg1 = foo "не работает, вы можете переключить цикл for на for /F "tokens=%var% delims= " %%A in ('echo.%*') do (
, чтобы он заработал, но это нарушает arg1 = foo и arg3 =" bar "
Это известная проблема с пакетными файлами, однаждывы начинаете возиться со строками, в некоторых конфигурациях все облажается, потому что всегда есть какой-то персонаж, который все испортит (%,!, ", ^, &, |, <,>, пробел и т. д.)