DOS 批處理 修改xml文件


之前對批處理和dos只停留在cd ping ipconfig水平,我以為改個文件應該很簡單吧,把文件讀出來做個替換再寫回去不就歐了,百度個例子改改,那還不是分分鍾的事,哪知道事實比想的要復雜的多。

我要修改的是這樣一個文件內容:

 ....

 mylove=“******”

 ....

mylove=“******”單獨占一行,我只需修改*號部分。

首先我想用set命令把一個文件內容賦值給一個變量,各種嘗試最后放棄了,本來以為set命令的a開關可以實現,哪知道這貨只支持運算符,強烈建議a開關支持表達式,類似 set /a xml= "type test.xml"

網上看大家的代碼,對文件操作大多用for命令,按行讀取賦值給變量,如下:

setlocal enabledelayedexpansion

set xml=""

for /f "delims=" %%a in ('type "mylove.xml"')

do ( set xml=!xml!%%a )

這樣確實可以。

注:要想修改一個聲明的變量時需要啟動延時命令setlocal enabledelayedexpansion,使用時的'%'變成‘!’

再用set 被替換xml替換xml替換下,再寫回到文件,問題是我寫的文件中包含 ‘!’字符,由於啟用了延時命令,echo !xml! > new.xml的時候會出問題,無奈只能把延時命令善了。

最后用了笨方法,每讀一行寫一行到臨時文件,如果讀到我要修改的那行,就把新的行寫進去。

期間遇到的問題有:

1.對空行(可能包含空格或tab也可能不包含)echo >new.xml 輸出的內容是 echo處於啥啥狀態,本來想用set :替換,怎么都替換不干凈,最后還是笨方法,先輸出一個到一個臨時文件temp1.xml,再重讀temp1.xml,過濾 echo...,輸出空行命令:@echo. >new.xml

2.輸出文件會有亂碼,原因是文件本來是utf-8編碼的,輸出的時候用的gbk。修改方法是輸出前執行:chcp 65001

如果你要修改的xml文件中不包含!,空行,不包含漢字或者是gbk編碼的話,要好處理很多。

代碼是笨了點好歹是實現了想要的結果,在這分享一點代碼希望能幫助需要的人。

需要修改的文件mylove.xml內容:

...

<!-- 曾經的曾經 -->

mylove="於紅"

...

批處理代碼:

set newline=mylove="李暢"

for /f "delims=" %%a in ('findstr "mylove=" mylove.xml')do (

for /f "delims=" %%i in ('type "mylove.xml"') do (

if %%i==%%a (echo %newline%>>newlove.xml)else echo %%i>>newlove.xml ) ) pause

在這要感謝網絡中各位戰友的回答和提問,以上如有錯誤和不合理的地方望指正。O(∩_∩)O謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM