标题: [文本处理] 批处理修改XML文件内容为何丢失感叹号? [打印本页]
作者: a770817895 时间: 2012-3-14 14:34 标题: 批处理修改XML文件内容为何丢失感叹号?
- Rem '/*=========修改cas.properties信息=============*/
- @echo off
- echo %input:"=%
- pause
- cd "%input:"=%"
- (for /f "delims=" %%a in (web.xml) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- set "str=!str:192.168.1.108=%IP_addr: =%!"
- echo,!str!
- endlocal
- ))>"%input:"=%\web.xml.tmp"
- move /y "%input:"=%\web.xml.tmp" "%input:"=%\web.xml"
复制代码
这是代码,我想修改web.xml文件中192.168.1.108为本地IP也就是%IP_addr: =%,这段代码是可执行的,
但是修改如下代码的时候:
<init-param>
<param-name>url-pattern</param-name>
<param-value>((?!/ums_client_interface).)*</param-value>
</init-param>
!号在新文件中就没有了,用了很多方法解决不了,请教各位大侠!!!!!!!!!!!!!!!!!!!!!!
作者: qiwei201 时间: 2012-3-14 15:01
回复 1# a770817895
因为启用了延迟变量,!变成了特殊符号,相当于%,你可以不用启用延迟,- REM setlocal enabledelayedexpansion
- call set "str=%%str:192.168.1.108=%IP_addr: =%%%"
- call echo,%%str%%
- REM endlocal
复制代码
没有测试,如果还不行可以用调用标签的形式。
其实这类问题最好用sed之类的工具,一下搞定并且效率比较高,你的批处理还会丢失空行。
作者: a770817895 时间: 2012-3-14 16:37
本帖最后由 a770817895 于 2012-3-14 17:59 编辑
回复 2# qiwei201
还是不行啊,我根据你说的改了,执行后是这样。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
就显示了个头部,其他的都没了。
修改后的代码是:
Rem '/*=========修改cas.properties信息=============*/
@echo off
echo %input:"=%
pause
cd "%input:"=%"
set oldip=192.168.1.108
(for /f "delims=" %%a in (web.xml) do (
set "str=%%a"
REM setlocal enabledelayedexpansion
call set "str=%%str:192.168.1.108=%IP_addr: =%%%"
call echo,%%str%%
REM endlocal
))>"%input:"=%\web.xml.tmp"
move /y "%input:"=%\web.xml.tmp" "%input:"=%\web.xml"
实在没办法了,急死,现在也没时间去研究新的东西了,老板着急要啊。
作者: find 时间: 2012-3-14 19:05
http://www.bathome.net/thread-1224-1-1.html
作者: find 时间: 2012-3-14 19:58
- sed -i "s/192.168.1.108/192.168.1.109/g" web.xml
复制代码
作者: powerbat 时间: 2012-3-14 21:20
回复 1# a770817895
你确定用的是这段代码吗?
如果你是通过其他bat调用这段代码,@echo off 后面加上setlocal disableDelayedExpansion, 最后一行后面加上endlocal
作者: a770817895 时间: 2012-3-15 10:01
回复 6# powerbat
我用inno setup制作的安装包。调用的这个.bat文件。
这是完整代码,也没几行
Rem '/*=========修改web.xml信息=============*/
@echo off
echo %input:"=%
pause
cd "%input:"=%"
(for /f "delims=" %%a in (web.xml) do (
set "str=%%a"
set "str=!str:192.168.1.108=%IP_addr: =%!"
echo,!str!
endlocal
))>"%input:"=%\web.xml.tmp"
move /y "%input:"=%\web.xml.tmp" "%input:"=%\web.xml"
作者: powerbat 时间: 2012-3-15 22:15
回复 7# a770817895
你这和1楼的代码完全不同,汗。。
作者: find 时间: 2012-3-15 22:26
回复 7# a770817895
setlocal enabledelayedexpansion怎么不见了?
作者: a770817895 时间: 2012-3-16 10:03
回复 8# powerbat
一样啊,就是修改的名字不一样啊。
作者: a770817895 时间: 2012-3-16 10:04
回复 9# find
在和不在都不行啊,
作者: powerbat 时间: 2012-3-16 22:42
6楼“你确定用的是这段代码吗?”,果然被我言中。。。
相差一个字符含义就可能天差地别,更何况你少了这么多。仔细看看,不至于眼神不好使吧。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |