与えられたデータをテキストファイルにしてそれを読みましょう。
@echo off for /F %%s in (%1) do echo %%s
08 49 81 …
実は、%%sには1行そのままではなくスペースとタブで区切られた最初のトークンが格納されます。文字列全体を格納するにはオプションで区切り文字をなくせばよいです。delims=で区切り文字を指定できますが、ここでは何も指定しないことで区切らないようにします。
for /F "delims=" %%s in (%1) do echo %%s
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 …
では、これらの文字列をスペースで区切ることにしましょう。
for /F "delims=" %%s in (%1) do ( call :split %%s b ) exit /b 0 :split echo %1 rem splitの実装 exit /b 0
08 49 81 …
ん?
:split echo %1 %2 …
08 02 49 49 81 49 …
引数になるときに勝手に区切られるんですね。コマンドラインがそうだから。
こういうときは引数を引用符で囲むと意図どおりになります。
for /F "delims=" %%s in (%1) do ( call :split "%%s" b ) exit /b 0 :split echo %~1 rem splitの実装 exit /b 0
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 …
変数に~をつけると引用符を取り除いてくれます。