使用bat修改配置文件,如何才能不出现乱码?

将配置文件pb_db.jocl中IP替换为本机IP:
。。。
(for /f "usebackq delims=" %%a in (%file%) do (
set v=%%a
setlocal enabledelayedexpansion
set v=!v:%configip%=%localip%!
echo !v!
endlocal))>%filetmp%
move %filetmp% "D:\data\pb_db.jocl"
替换前文件内容:
<?xml version="1.0" encoding="utf-8" ?><appSettings>
。。。
<!--当value="enabled"为调试模式,启动visual studio-->
<add key="DEBUG_MODE" value=""/>
<!--pb数据库ADO连接-->
<add key="pb_DB2_ADO" value="Location=192.168.18.5;Provider=IBMDADB2.1;Mode=ReadWrite;User ID=db2user;Data Source=PBDB;Password=123"/>
。。。。
替换后文件出现乱码:
锘??xml version="1.0" encoding="utf-8" ?>
。。。
ECHO 处于关闭状态。
<appSettings>
<!--褰捣alue="enabled"涓鸿皟璇曟ā寮忥紝鍚姩visual studio-->
<add key="DEBUG_MODE" value=""/>
<!--寰幆棰戠巼锛堢锛?->
<add key="FREQENCY_SECOND" value="20"/>
<!--Ris鏁版嵁搴揂DO杩炴帴-->
<add key="pb_DB2_ADO" value="Location=192.168.19.7;rovider=IBMDADB2.1;Mode=ReadWrite;User ID=db2user;Data Source=PBDB;Password=123"/>

Chcp 65001>nul
(for /f "usebackq delims=" %%a in (%file%) do (
set v=%%a
setlocal enabledelayedexpansion
set v=!v:%configip%=%localip%!
echo !v!
endlocal))>%filetmp%
Chcp 936>nul
move %filetmp% "D:\data\pb_db.jocl"

因为配置文件编码为UTF-8,所以修改后默认会乱码,在你的代码中添加了两行代码即可实现修改后不乱码.

追问

谢谢回答,修改后遇到新问题,bat运行到chcp 65001>nul 自动跳出,cmd界面关闭了,能再帮分析下吗?

追答

set v=%%a
setlocal enabledelayedexpansion
set v=!v:%configip%=%localip%!
echo !v!
endlocal))>%filetmp%&&move %filetmp% "D:\data\pb_db.jocl"

Win7没问题,xp确实有这样的问题,且处理后第一个字符会出错.

追问

谢谢跟踪解决,试了一下&&方式,乱码问题还存在,新方法和我最初方法,新文件中都会插入”ECHO 处于关闭状态。” 字样的行(原始问题乱码举例也可以看到),导致配置文件不可用。不可用的话,整个替换操作就没有意义了。 补充下,使用环境是server2008 64bit

追答

额,我测试Server08 64无问题

追问

有问题啊,可以用列出的配置验证,与最初错误是一样的

温馨提示:答案为网友推荐,仅供参考
相似回答