批處理替換xml檔案指定內容
阿新 • • 發佈:2019-01-04
由於常常需要切換IP地址的配置檔案,多個檔案修改,其實最簡單的就是edittext++ 查詢替換
但是有的時候就是抽風,閒的蛋疼,想編寫一個windows批處理檔案進行修改,想想應該挺小菜的,網上應該容易找的到。。
萬萬沒想到。。。
記下來,萬一有誰和我一樣抽風...,提供個參考
@echo off & setlocal enabledelayedexpansion echo ***請輸入需要操作的序號*** echo. echo 1.替換152伺服器為...伺服器 echo. echo 2.替換...伺服器為152伺服器 echo. set /p num=請輸入操作選項: chcp 65001 set dscfgdir=/檔案目錄 set apachedir=d:\檔案目錄 if %num%==1 ( cd /d %apachedir% for /f "tokens=*" %%i in (context.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg) )>>context.tmp for /f "tokens=*" %%i in (server.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg) )>>server.tmp call :modify cd %dscfgdir% for /f "tokens=*" %%i in (dscfg.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg) )>>dscfg.tmp call :modifydsc ) else if %num% ==2 ( cd /d %apachedir% for /f "tokens=*" %%i in (context.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>context.tmp ) for /f "tokens=*" %%i in (server.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>server.tmp ) call :modify cd %dscfgdir% for /f "tokens=*" %%i in (dscfg.xml) do ( if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2) )>>dscfg.tmp call :modifydsc ) else (echo 無效選項) pause exit :chg rem 進行替換操作 set "line=!line:需要替換的字元=替換的字元!" echo !line! goto :eof :chg2 set "line=!line:需要替換的字元=替換的字元!" echo !line! goto :eof :modify if exist context.bak (del context.bak) ren context.xml context.bak ren context.tmp context.xml if exist server.bak (del server.bak) ren server.xml server.bak ren server.tmp server.xml :modifydsc if exist dscfg.bak (del dscfg.bak) ren dscfg.xml dscfg.bak ren dscfg.tmp dscfg.xml
chcp65001是解決xml中中文字元的
你以為這就完了,,還有一個更坑的玩意兒,!與windows的延遲變數之間的。。。按照上邊輸出,!是輸不出的
需要在for迴圈中新增
for /f "tokens=*" %%i in (context.xml) do (
if "%%i"=="" (echo.) else (
setlocal disabledelayedexpansion
set "line=%%i" & call :chg)
)>>context.tmp
for迴圈中都改真這個樣子,總共四個。。
chg ,chg2都改成這個樣子:chg rem 進行替換操作 setlocal enabledelayedexpansion set "line=!line:10.2.0.152=10.8.2.35!" echo !line! goto :eof
這是臨時關閉、開啟延遲變數
提供一個最簡化的例子,一共方便檢視
@echo off & setlocal enabledelayedexpansion
chcp 65001
for /f "tokens=*" %%i in (context.txt) do (
setlocal disabledelayedexpansion
set line=%%i
setlocal enabledelayedexpansion
echo !line!
)
pause