[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖

[文本处理] 求助批处理修改文件内容的问题

  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
复制代码
所有文件我打包上传了,请大哥帮助解决一下,不胜感激
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

纯P下就别搞XML应答了,真不适合,一堆的特殊字符【不闪退必出错】,用第三方或是其它语言吧
这么好的论坛你上哪找
注:请遵守互联网信息安全,勿用于非法用途,伸手党直接去某度

TOP

  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. }
复制代码
虽然不知道你想干什么,但是第一条效果一样

TOP

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

TOP

回复 3# xp3000


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

TOP

回复 4# WHY


    谢谢大哥热心回复,批处理真的没办法解决吗

TOP

回复 2# /zhqsystem/zhq


    谢谢大哥热心回复,希望能给指条明路

TOP

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

回复 6# fhplove


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

TOP

回复 8# 极品小猫


    1000+台PC其中很分散的400台需要修改,但是后台修改作用于所有PC,就想用小工具去处理,所以才用此方法

TOP

  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
智慧是,利用最简单的代码替代复杂事情的处理过程。
付款请扫头像二维码码,谢谢

TOP

回复 10# lifei259


    感谢热心回复,我试了一下,config文件里的false全都变成true了

TOP

  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. };
复制代码

TOP

如果是标准的 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');
复制代码

TOP

回复 9# fhplove


    这么多机器,可以考虑试试PowerShell
【扫描二维码捐助论坛的朋友请留言注明论坛账号】http://bbs.bathome.net/thread-10403-1-1.html
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

TOP

返回列表