Windowsバッチで半角スペースが含まれる値を引数としてサブルーチンへ渡し、サブルーチン内でechoとテキスト出力を行うと、echoされる内容とテキストに出力される内容が異なる。
test_1.bat
@echo off
setlocal enabledelayedexpansion
set TestStr=test 1
call :OUTPUT_LOG1 "!TestStr!"
:OUTPUT_LOG1
echo %~1
echo %~1>> .¥output_1.txt
コンソール出力
test 1
output_1.txt
test
「 1」(半角スペース以降)はechoによる表示はされるがテキストには出力されない。
回避するには、サブルーチン内で引数を一度環境変数に代入する。
test_2.bat
@echo off
setlocal enabledelayedexpansion
set TestStr=test 2
call :OUTPUT_LOG2 "!TestStr!"
:OUTPUT_LOG2
set TmpStr=%~1
echo !TmpStr!
echo !TmpStr!>> .¥output_2.txt
コンソール出力
test 2
output_2.txt
test 2
サブルーチン内で引数の文字列置換をかけたい場合なども、一度環境変数に代入することで対応可能になる。