@echo off setlocal enabledelayedexpansion set OPT_O=OFF set OPT_Q=OFF set ARGV= set WAIT_OPT_S=0 shift for %%1 in (%*) do ( call :parse_arg %%1 ) goto parse_end rem *** パラメータ解析 *** :parse_arg set PARA=%1 if "%PARA:~0,1%"=="-" ( set WAIT_OPT_S=0 call :parse_opt %PARA:~1% ) else ( if "%WAIT_OPT_S%"=="1" set OPT_S=%PARA% & set WAIT_OPT_S=0 & goto :EOF set ARGV=%ARGV% %PARA% ) goto :EOF rem *** オプション解析 *** :parse_opt set OPT=%1 :parse_an_opt if "%OPT%"=="" goto :EOF set OPT2=%OPT:~0,1% if "%OPT2%"=="o" ( set OPT_O=ON ) else if "%OPT2%"=="q" ( set OPT_Q=ON ) else if "%OPT2%"=="s" ( set OPT_S=%OPT:~1,1% set OPT=%OPT:~1% if "!OPT_S!"=="" set WAIT_OPT_S=1 ) set OPT=%OPT:~1% goto :parse_an_opt rem *** 結果出力 *** :parse_end echo [オプション情報] echo o : %OPT_O% echo q : %OPT_Q% echo s : %OPT_S% set /A COUNT=0 for %%1 in (%ARGV%) do set /A COUNT += 1 set /A ARGC=1 echo [パラメータ情報] echo 指定数:%COUNT% for %%1 in (%ARGV%) do ( echo !ARGC! : %%1 set /A ARGC += 1 ) endlocal