Board logo

标题: [文本处理] 求助批处理修改文件内容的问题 [打印本页]

作者: fhplove    时间: 2018-11-5 18:02     标题: 求助批处理修改文件内容的问题

  1. @echo off
  2. Chcp 65001>nul
  3. copy Agent.xml Agent.xml_bak
  4. ren Agent.xml Server.txt
  5. setlocal Enabledelayedexpansion
  6. for /f "tokens=*" %%a in (Server.txt) do (
  7. set var=%%a
  8. set var=!var:http://www.baidu.com/ss/avvin.doc=http://10.180.221.151:8081/index.htm!
  9. echo !var!>>Server_wq.txt
  10. )
  11. endlocal
  12. ren Server_wq.txt Agent.xml
  13. del /q /s Server.txt
  14. pause
复制代码
以上这个代码修改是成功的,可以替换文件内容相应内容。
--------------------------------------------------------------------------------------------------------------
如下代码修改文件内容失败
  1. @echo off
  2. Chcp 65001>nul
  3. ::Chcp 936>nul
  4. copy Agent.Config Agent.Config_bak
  5. ren Agent.Config Config.txt
  6. setlocal Enabledelayedexpansion
  7. for /f "tokens=*" %%b in (Config.txt) do (
  8. set var=%%b
  9. set var=!var:<add key="IsLocalLogin" value="False" />=<add key="IsLocalLogin" value="True" />!
  10. echo !var!>>Config_wq.txt
  11. )
  12. endlocal
  13. ren config_wq.txt Agent.Config
  14. del /q /s Config.txt
  15. pause
复制代码
所有文件我打包上传了,请大哥帮助解决一下,不胜感激
作者: /zhqsystem/zhq    时间: 2018-11-5 19:36

纯P下就别搞XML应答了,真不适合,一堆的特殊字符【不闪退必出错】,用第三方或是其它语言吧
作者: xp3000    时间: 2018-11-5 19:59

  1. @set @n=0;/* & echo off
  2. dir /b *.xml|cscript -nologo -e:jscript "%~0" ""
  3. exit/b & rem */
  4. arg = WScript.Arguments(0);
  5. fso = new ActiveXObject("Scripting.FileSystemObject");
  6. while (!WSH.StdIn.AtEndOfStream) {
  7.     f = WSH.StdIn.ReadLine();
  8.     txt = fso.OpenTextFile(f,1).ReadAll().replace(/(<szC>).+(<\/szC>)/,"$1http://10.180.221.151:8081/index.htm$2");
  9.     fso.OpenTextFile(f,2).Write(txt);
  10. }
复制代码
虽然不知道你想干什么,但是第一条效果一样
作者: WHY    时间: 2018-11-5 20:43

纯批替换等于符号(=)很麻烦,PowerShell 可以这样
  1. $arr = (type Agent.Config) -replace '(?<=<add key="IsLocalLogin" value=")False(?=" />)','True';
  2. sc Agent.Config -Value $arr -Encoding UTF8
复制代码

作者: fhplove    时间: 2018-11-6 09:34

回复 3# xp3000


    首先谢谢大哥回答,我是想用批处理把文件内的 <add key="IsLocalLogin" value="False" />  替换成  <add key="IsLocalLogin" value="True" />    简单点说就是False 替换成 True ,但是文件内有很多False 和 True 所以想找个方法将这一行给替换掉!
作者: fhplove    时间: 2018-11-6 09:34

回复 4# WHY


    谢谢大哥热心回复,批处理真的没办法解决吗
作者: fhplove    时间: 2018-11-6 09:35

回复 2# /zhqsystem/zhq


    谢谢大哥热心回复,希望能给指条明路
作者: 极品小猫    时间: 2018-11-6 09:36

本帖最后由 极品小猫 于 2018-11-6 09:43 编辑

回复 6# fhplove


    操作困难繁琐效率低,还不如使用文本工具的宏脚本。
纯P对Unicode不友好,遇到个特殊字符就崩掉。
如果真的要处理纯文本,可以考虑使用第三方命令行工具,sed
作者: fhplove    时间: 2018-11-6 10:19

回复 8# 极品小猫


    1000+台PC其中很分散的400台需要修改,但是后台修改作用于所有PC,就想用小工具去处理,所以才用此方法
作者: lifei259    时间: 2018-11-6 11:36

  1. @echo off
  2. copy Agent.Config Agent.Config_bak
  3. ren Agent.Config Config.txt
  4. pause
  5. setlocal Enabledelayedexpansion
  6. for /f "tokens=*" %%b in (Config.txt) do (
  7. set var=%%b
  8. echo,!var!^|findstr /ixr /c:"IsLocalLogin">nul&&set var=!var:False=True!
  9. echo,!var!>>$
  10. )
  11. endlocal
  12. ren $ Agent.Config
  13. pause
复制代码
回复 5# fhplove

作者: fhplove    时间: 2018-11-7 11:32

回复 10# lifei259


    感谢热心回复,我试了一下,config文件里的false全都变成true了
作者: xp3000    时间: 2018-11-7 12:48

  1. @set @n=0//&cscript -nologo -e:jscript "%~0"&pause&exit/b
  2. with (new ActiveXObject("ADODB.Stream")){
  3.     Type = 2;
  4.     Mode = 3;
  5.     CharSet = "utf-8";
  6.     Open();
  7.     LoadFromFile("Agent.Config");
  8.     text = ReadText(-1);
  9.     text = text.replace(/(<add key=\"IsLocalLogin\" value=\")False(\" \/>)/,"$1True$2");
  10.     Position = 0;
  11.     WriteText(text);
  12.     SetEOS();
  13.     SaveToFile("Agent.Config",2);
  14.     Close();
  15. };
复制代码

作者: WHY    时间: 2018-11-7 21:09

如果是标准的 XML 文档可以这样:
  1. var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
  2. xmlDoc.load('Agent.Config');
  3. var arr = xmlDoc.selectNodes("//add[@key='IsLocalLogin' and @value!='True']");
  4. for(var i=0; i<arr.length; i++){
  5.     arr[i].setAttribute('value', 'True');
  6. }
  7. xmlDoc.save('Agent.Config.txt');
复制代码

作者: Batcher    时间: 2018-11-8 21:35

回复 9# fhplove


    这么多机器,可以考虑试试PowerShell




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2