質問: 下記の様なファイルを読み込むバッチファイルを作成しました。 表示結果の様に 1."!"が表示されない 2.";"の行が表示されない という結果になったのですが、表示させることは出来るでしょうか。 2については、仕様? sample.bat ``` @echo off rem スクリプトが置かれている場所をカレントディレクトリにする cd /d %~dp0 rem 遅延環境変数の宣言 setlocal enabledelayedexpansion rem ファイル名 SET file=sample.txt rem 1行ずつ読み込む for /f "delims=" %%l in (%file%) do ( set s=%%l echo %%l echo !s! echo ------------ ) ``` sample.txt ``` !テスト1 ;test2 @test3 :テスト4 %test5 ``` 表示結果 ``` C:\Users\test>sample.bat テスト1 テスト1 ------------ @test3 @test3 ------------ :テスト4 :テスト4 ------------ %test5 %test5 ------------ ```
回答: 1は、`enabledelayedexpansion`をしているためです。`!`の解釈は`%%l`の展開後に行われるので、 `set s=!test1`となり、`!`が対応する`!`が無いとう事で削除されます。 `echo`も同様。 2は、`set`の`eol`オプションのデフォルトが`;`のため、行の先頭が`;`の行は読み飛ばされます。 行の先頭に絶対に現れない文字があるなら、それを`eol=`で指定すれば良いです。`delims`と違って空に設定することは出来なさそうです。 バッチスクリプトだけでは、ファイルの内容に前提(この文字が現れないとか)がないと読み込めません。 例えば空行を読み込むのは無理。