Windowsバッチで「test 1」のように(半角スペース+数字)を含む文字列をechoしようとしても上手くいかない場合がある。
test.bat
@echo off
setlocal enabledelayedexpansion
set OUTPUT_PATH=".\output.txt"
set INPUT_TEXT_0="test 0"
set INPUT_TEXT_1="test 1"
set INPUT_TEXT_2="test 2"
set INPUT_TEXT_3="test 9"
set INPUT_TEXT_4="test 10"
set INPUT_TEXT_5="test 11"
set INPUT_TEXT_6="test 99"
set INPUT_TEXT_7="test a"
call :OUTPUT_TEXT !INPUT_TEXT_0!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_1!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_2!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_3!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_4!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_5!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_6!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_7!
call :OUTPUT_BLANK
pause
goto EOF
:OUTPUT_TEXT
echo [OUTPUT_TEXT_1]%~1
echo [OUTPUT_TEXT_1]%~1>> !OUTPUT_PATH!
echo [OUTPUT_TEXT_2]"%~1"
echo [OUTPUT_TEXT_2]"%~1">> !OUTPUT_PATH!
echo [OUTPUT_TEXT_3]%1
echo [OUTPUT_TEXT_3]%1>> !OUTPUT_PATH!
exit /b
:OUTPUT_BLANK
echo.
echo.>> !OUTPUT_PATH!
exit /b
:EOF
コンソール出力
[OUTPUT_TEXT_1]test 0
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 0"
[OUTPUT_TEXT_3]"test 0"
[OUTPUT_TEXT_1]test 1
[OUTPUT_TEXT_2]"test 1"
[OUTPUT_TEXT_3]"test 1"
[OUTPUT_TEXT_1]test 2
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 2"
[OUTPUT_TEXT_3]"test 2"
[OUTPUT_TEXT_1]test 9
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 9"
[OUTPUT_TEXT_3]"test 9"
[OUTPUT_TEXT_1]test 10
[OUTPUT_TEXT_2]"test 10"
[OUTPUT_TEXT_3]"test 10"
[OUTPUT_TEXT_1]test 11
[OUTPUT_TEXT_2]"test 11"
[OUTPUT_TEXT_3]"test 11"
[OUTPUT_TEXT_1]test 99
[OUTPUT_TEXT_2]"test 99"
[OUTPUT_TEXT_3]"test 99"
[OUTPUT_TEXT_1]test a
[OUTPUT_TEXT_2]"test a"
[OUTPUT_TEXT_3]"test a"
続行するには何かキーを押してください . . .
output.txt
[OUTPUT_TEXT_2]"test 0"
[OUTPUT_TEXT_3]"test 0"
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 1"
[OUTPUT_TEXT_3]"test 1"
[OUTPUT_TEXT_2]"test 2"
[OUTPUT_TEXT_3]"test 2"
[OUTPUT_TEXT_2]"test 9"
[OUTPUT_TEXT_3]"test 9"
[OUTPUT_TEXT_1]test 10
[OUTPUT_TEXT_2]"test 10"
[OUTPUT_TEXT_3]"test 10"
[OUTPUT_TEXT_1]test 11
[OUTPUT_TEXT_2]"test 11"
[OUTPUT_TEXT_3]"test 11"
[OUTPUT_TEXT_1]test 99
[OUTPUT_TEXT_2]"test 99"
[OUTPUT_TEXT_3]"test 99"
[OUTPUT_TEXT_1]test a
[OUTPUT_TEXT_2]"test a"
[OUTPUT_TEXT_3]"test a"
半角スペースを挟んで1桁の数字は数値として認識されるためか期待通りの出力にならない。また1桁の数字でも1とそれ以外で出力が変わる。
半角スペースを挟んでも2桁以上の数字、もしくはアルファベットなど文字列として認識されるものであれば期待通りに出力される。勿論、ダブルクォートで括る(既に括られている場合はサブルーチン側で外さない)ことで回避は可能。