簡體   English   中英

批處理文件,用於讀取文件並用新的替換字符串

[英]A Batch file to read a file and replace a string with a new one

我想創建一個批處理文件,以在循環中讀取文件的每一行,並用另一個替換字符串。 以下是我的代碼段:

for /F "tokens=*" %%i in (myfile) do (
  set str=%%i
  set str=%str: %oldstring% = %newstring%%
echo %str% >> newfile
)

這將導致一個新文件,其中“ Echo is off”與myfile中的行數一樣多。 好像str變量分配給%% i時根本沒有任何值。 有人能幫我嗎?

試試這個小腳本:

@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
)

順便說一句,這個片斷是假設oldstringnewstring不會在for循環中進行設置,否則事情會變得混亂。

玩得開心。

花了一些時間我得到了正確的方法:

@echo off
setlocal enabledelayedexpansion

set oldstring=AF-07295
set /a count=1000

for %%f in (*.*) do (
  set /a count=!count!+1
  for /f "tokens=*" %%i in (%%f) do (
    set str=%%i

    call set str=%%str:!oldstring!=!count!%%
    echo !str! >> %%~nf.ordnew

  )
)

endlocal
setlocal ENABLEDELAYEDEXPANSION
set filein="c:\program files\test1.txt"
set fileout="c:\program files\test2.txt"
set old=@VERSION@
set new=2.0.3
for /f "tokens=* delims=¶" %%i in ( '"type %filein%"') do (
    set str=%%i
    set str=!str:%old%=%new%!
    echo !str! >> %fileout% 
)

工作完美,並且在lines文件開頭沒有刪除空格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM