Board logo

标题: [文本处理] 批处理修改XML文件内容为何丢失感叹号? [打印本页]

作者: a770817895    时间: 2012-3-14 14:34     标题: 批处理修改XML文件内容为何丢失感叹号?

  1. Rem '/*=========修改cas.properties信息=============*/
  2. @echo off
  3. echo %input:"=%
  4. pause
  5. cd "%input:"=%"
  6. (for /f "delims=" %%a in (web.xml) do (
  7.   set "str=%%a"
  8.   setlocal enabledelayedexpansion
  9.   set "str=!str:192.168.1.108=%IP_addr: =%!"
  10.   echo,!str!
  11.   endlocal
  12. ))>"%input:"=%\web.xml.tmp"
  13. 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


    因为启用了延迟变量,!变成了特殊符号,相当于%,你可以不用启用延迟,
  1.   REM setlocal enabledelayedexpansion
  2.   call set "str=%%str:192.168.1.108=%IP_addr: =%%%"
  3.   call echo,%%str%%
  4.   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

  1. 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