Comment detail

起動オプションの解析 (Nested Flatten)
バッチファイル。遅延環境変数展開で。
お題の起動例にあるパターンはすべて解釈できていると思います。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@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
おっと、異常終了とか忘れてた。
バッチファイルの異常終了ってこんなんでいいのかな。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
46a47,53
>
> set /A COUNT=0
> for %%1 in (%ARGV%) do set /A COUNT += 1
>
> if not "%OPT_O%"=="ON" echo oオプションは必須です。 & exit /b 1
> if "%COUNT%"=="0"  echo パラメータは必須です。 & exit /b 1
>
52,54d58
< set /A COUNT=0
< for %%1 in (%ARGV%) do set /A COUNT += 1
<
63a68
> exit /b 0

Index

Feed

Other

Link

Pathtraq

loading...