試試這個小腳本:
@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
不會在for循環中進行設置,否則事情會變得亂。
玩得開心。
謝謝萬億不刪除空格! !我在批量編程方面絕對是新的。我以前見過'setlocal enabledelayedexpansion',但dint知道它的功能。因此從未使用它。謝謝你的解釋。是的,oldstring&newstring被設置在循環之外,我的代碼現在工作正常!再次感謝.. :) – Joyel 2013-03-11 07:19:19
@ user2147904它是否回答你的問題,如果有,請點擊接受。如果它只是幫助,upvote。 – 2013-03-11 07:21:11
嗨,Pickle教授,我還有一個問題。我認爲你不能在str之後留出空間:現在,假設oldstring是在for循環內分配(並更改)的變量。然後我們必須使用set str =!str:!oldstring!=%newstring%!.但它在遇到2nd時不起作用,它終止了目的。解決辦法是什麼?請幫忙。 – Joyel 2013-03-11 10:50:13