DOS 批處理 修改xml檔案

來源:互聯網
上載者:User

標籤:style   color   使用   os   io   檔案   for   問題   

之前對批處理和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謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.