これはあなたのコードで、わずかに変更されています:
@echo OFF &SETLOCAL ENABLEDELAYEDEXPANSION
set "name=%~1"
for /f "delims=" %%a in (model-tim-valid-pgm.txt) do (
set "str=%%a"
set "str=!str:###=%name%!"
echo !str! >> tim-valid-pgm.mac
)
何が起こるか見てみましょう(コードxxd
でファイルを視覚化することですhex
):
> model-tim-valid-pgm.txt と入力
###
>xxd -g1 モデル-tim-valid-pgm.txt
0000000: 23 23 23 0d 0a ###..
ご覧のとおり、 には末尾のスペースがありませんmodel-tim-valid-pgm.txt
。スクリプトが実行され、次のtim-valid-pgm.mac
ように作成されます。
>script.bat ABC123
> tim-valid-pgm.mac と入力します
ABC123
>xxd -g1 tim-valid-pgm.mac
0000000: 41 42 43 31 32 33 20 0d 0a ABC123 ..
> for /f "delims=" %a in (tim-valid-pgm.mac) do @echo "%a"
「ABC123」
これで、末尾のスペース (HEX 20 )がはっきりとわかります。コードを見ると、末尾のスペースがここで発生します: echo !str! >> tim-valid-pgm.mac
in this statement: !str!
[SPACE] >>
. これを避けるには、次のコード スタイルを使用してください。
@echo OFF &SETLOCAL ENABLEDELAYEDEXPANSION
set "name=%~1"
for /f "delims=" %%a in (model-tim-valid-pgm.txt) do (
set "str=%%a"
set "str=!str:###=%name%!"
>> tim-valid-pgm.mac echo !str!
)
..ここに出力:
>script.bat ABC123
> tim-valid-pgm.mac と入力します
ABC123
>xxd -g1 tim-valid-pgm.mac
0000000: 41 42 43 31 32 33 0d 0a ABC123..
> for /f "delims=" %a in (tim-valid-pgm.mac) do @echo "%a"
「ABC123」
バッチ スクリプトの!str!
.