标题: [文本处理] 求助批处理修改文件内容的问题 [打印本页]
作者: fhplove 时间: 2018-11-5 18:02 标题: 求助批处理修改文件内容的问题
- @echo off
- Chcp 65001>nul
- copy Agent.xml Agent.xml_bak
- ren Agent.xml Server.txt
- setlocal Enabledelayedexpansion
- for /f "tokens=*" %%a in (Server.txt) do (
- set var=%%a
- set var=!var:http://www.baidu.com/ss/avvin.doc=http://10.180.221.151:8081/index.htm!
- echo !var!>>Server_wq.txt
- )
- endlocal
- ren Server_wq.txt Agent.xml
- del /q /s Server.txt
- pause
复制代码
以上这个代码修改是成功的,可以替换文件内容相应内容。
--------------------------------------------------------------------------------------------------------------
如下代码修改文件内容失败- @echo off
- Chcp 65001>nul
- ::Chcp 936>nul
- copy Agent.Config Agent.Config_bak
- ren Agent.Config Config.txt
- setlocal Enabledelayedexpansion
- for /f "tokens=*" %%b in (Config.txt) do (
- set var=%%b
- set var=!var:<add key="IsLocalLogin" value="False" />=<add key="IsLocalLogin" value="True" />!
- echo !var!>>Config_wq.txt
- )
- endlocal
- ren config_wq.txt Agent.Config
- del /q /s Config.txt
- pause
复制代码
所有文件我打包上传了,请大哥帮助解决一下,不胜感激
作者: /zhqsystem/zhq 时间: 2018-11-5 19:36
纯P下就别搞XML应答了,真不适合,一堆的特殊字符【不闪退必出错】,用第三方或是其它语言吧
作者: xp3000 时间: 2018-11-5 19:59
- @set @n=0;/* & echo off
- dir /b *.xml|cscript -nologo -e:jscript "%~0" ""
- exit/b & rem */
- arg = WScript.Arguments(0);
- fso = new ActiveXObject("Scripting.FileSystemObject");
- while (!WSH.StdIn.AtEndOfStream) {
- f = WSH.StdIn.ReadLine();
- txt = fso.OpenTextFile(f,1).ReadAll().replace(/(<szC>).+(<\/szC>)/,"$1http://10.180.221.151:8081/index.htm$2");
- fso.OpenTextFile(f,2).Write(txt);
- }
复制代码
虽然不知道你想干什么,但是第一条效果一样
作者: WHY 时间: 2018-11-5 20:43
纯批替换等于符号(=)很麻烦,PowerShell 可以这样- $arr = (type Agent.Config) -replace '(?<=<add key="IsLocalLogin" value=")False(?=" />)','True';
- 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
- @echo off
- copy Agent.Config Agent.Config_bak
- ren Agent.Config Config.txt
- pause
- setlocal Enabledelayedexpansion
- for /f "tokens=*" %%b in (Config.txt) do (
- set var=%%b
- echo,!var!^|findstr /ixr /c:"IsLocalLogin">nul&&set var=!var:False=True!
- echo,!var!>>$
- )
- endlocal
- ren $ Agent.Config
- pause
复制代码
回复 5# fhplove
作者: fhplove 时间: 2018-11-7 11:32
回复 10# lifei259
感谢热心回复,我试了一下,config文件里的false全都变成true了
作者: xp3000 时间: 2018-11-7 12:48
- @set @n=0//&cscript -nologo -e:jscript "%~0"&pause&exit/b
- with (new ActiveXObject("ADODB.Stream")){
- Type = 2;
- Mode = 3;
- CharSet = "utf-8";
- Open();
- LoadFromFile("Agent.Config");
- text = ReadText(-1);
- text = text.replace(/(<add key=\"IsLocalLogin\" value=\")False(\" \/>)/,"$1True$2");
- Position = 0;
- WriteText(text);
- SetEOS();
- SaveToFile("Agent.Config",2);
- Close();
- };
复制代码
作者: WHY 时间: 2018-11-7 21:09
如果是标准的 XML 文档可以这样:- var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
- xmlDoc.load('Agent.Config');
- var arr = xmlDoc.selectNodes("//add[@key='IsLocalLogin' and @value!='True']");
- for(var i=0; i<arr.length; i++){
- arr[i].setAttribute('value', 'True');
- }
- xmlDoc.save('Agent.Config.txt');
复制代码
作者: Batcher 时间: 2018-11-8 21:35
回复 9# fhplove
这么多机器,可以考虑试试PowerShell
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |