この小さなスクリプトを試してみてください。
@echo off
set val=50
echo %val%
for /l %%i in (1,1,1) do (
set val=%%i
echo %val%
)
echo %val%
pause>nul
出力は次のとおりです。
50
50
1
あなたが期待したものではありませんよね?
これは、for
ループでは、ループが終了するまで変数が更新されないためです。これに対抗するには、を使用しsetlocal enabledelayedexpansion
、パーセント記号(%
)を感嘆符()に置き換えることができます!
。
@echo off
setlocal enabledelayedexpansion
set val=50
echo %val%
for /l %%i in (1,1,1,) do (
set val=%%i
echo !val!
)
echo %val%
pause>nul
出力:
50
1
1
str
変数が(ループ中に)値を保持しない理由は、for
事前に設定されていないためです。
したがって、これらの簡単な変更で、スクリプトは機能します...
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (myfile) do (
set str=%%i
set str=!str: %oldstring% = %newstring%!
echo !str! >> newfile
)
ちなみに、このスニペットは、forloop内に設定されていないことを前提oldstring
としています。そうしないと、問題が発生します。newstring
楽しむ。