[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理修改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>
!号在新文件中就没有了,用了很多方法解决不了,请教各位大侠!!!!!!!!!!!!!!!!!!!!!!

回复 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之类的工具,一下搞定并且效率比较高,你的批处理还会丢失空行。

TOP

本帖最后由 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"


实在没办法了,急死,现在也没时间去研究新的东西了,老板着急要啊。

TOP

TOP

  1. sed -i "s/192.168.1.108/192.168.1.109/g" web.xml
复制代码

TOP

回复 1# a770817895


    你确定用的是这段代码吗?

如果你是通过其他bat调用这段代码,@echo off 后面加上setlocal disableDelayedExpansion, 最后一行后面加上endlocal

TOP

回复 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"

TOP

回复 7# a770817895


    你这和1楼的代码完全不同,汗。。

TOP

回复 7# a770817895


setlocal enabledelayedexpansion怎么不见了?

TOP

回复 8# powerbat


    一样啊,就是修改的名字不一样啊。

TOP

回复 9# find


    在和不在都不行啊,

TOP

6楼“你确定用的是这段代码吗?”,果然被我言中。。。
相差一个字符含义就可能天差地别,更何况你少了这么多。仔细看看,不至于眼神不好使吧。

TOP

返回列表