试试这个小脚本:
@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
)
顺便说一句,这个片段假设oldstring
并且newstring
不会在 forloop 中设置,否则事情会变得一团糟。
玩得开心。