标题: [文件操作] [已解决]批处理如何删除XML文件的指定节点/标签/元素? [打印本页]
作者: 001011 时间: 2012-3-17 15:56 标题: [已解决]批处理如何删除XML文件的指定节点/标签/元素?
本帖最后由 pcl_test 于 2017-4-30 08:06 编辑
我要删除XML文件的几个节点,他们分别是
<dc:title1></dc:title1>
<dc:title2></dc:title2>
<dc:title3></dc:title3>
<publisher1></publisher1>
<contributor1></contributor1>
<relation1></relation1>
这些节点有可能是有值的 也有可能是空值
文件路径在附件中
谢谢各位老师
作者: find 时间: 2012-3-17 17:05
能否上传一个XML文件让我测试一下代码?
作者: 001011 时间: 2012-3-17 17:09
在附件中呀
作者: find 时间: 2012-3-17 17:38
- sed -i "s#<dc:title1>[^<]\+</dc:title1>##" dc.xml
复制代码
作者: 001011 时间: 2012-3-17 17:53
没有什么效果呀
作者: find 时间: 2012-3-17 18:10
回复 5# 001011
你用的哪个版本的sed?
作者: 001011 时间: 2012-3-17 18:18
凡事带数字的节点 都是辅助节点 用完后就要删除
作者: find 时间: 2012-3-17 18:42
回复 7# 001011
我的用的一个软件做的这些文件
这些文件是UTF-8格式的
sed我没有用
谢谢您
sed你没用那现在就用一下吧
不用单独发消息给我,你直接回复我的帖子,论坛会自动提醒我。
作者: find 时间: 2012-3-17 18:44
- sed -i "s#<dc:title1>[^<]\+</dc:title1>##; s#<dc:title2>[^<]\+</dc:title2>##" dc.xml
复制代码
其它节点照着这个格式继续就行了
作者: 001011 时间: 2012-3-17 19:12
抱歉 我实在是不知道怎么用 复制到BAT里面运行吗
作者: terse 时间: 2012-3-17 19:49
回复 10# 001011
需要外部命令 SED.EXE- @echo off
- for /f %%i in ('dir /b /a-d /s "E:\a\dc.xml" "E:\a\a.opf"') do (
- sed -i "s/<dc:title1>.*<\/dc:title1>//g;s/<dc:title2>.*<\/dc:title2>//g;s/<dc:title3>.*<\/dc:title3>//g;s/<publisher1>.*<\/publisher1>//g;s/<contributor1>.*<\/dc:contributor1>//g;s/<relation1>.*<\/relation1>//g" "%%i"
- )
- pause
复制代码
作者: find 时间: 2012-3-17 20:01
回复 10# 001011
是的,把sed.exe和test.bat放在同一个目录
作者: powerbat 时间: 2012-3-17 22:08
sed好像不支持utf-8吧。
使用前注意备份。- @set @n=0//& cscript.exe -e:jscript "%~f0" &pause&exit/b
-
- strQuery = "select name from CIM_DataFile where "
- + " drive='E:' and path like '\\\\A\\\\%' and ("
- + "(filename='a' and extension='opf') or "
- + "(filename='dc' and extension='xml'))";
- wmi = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer();
- colFiles = wmi.ExecQuery(strQuery, "WQL", 48);
- e = new Enumerator(colFiles);
- for (; !e.atEnd(); e.moveNext())
- {
- f = e.item().name;
- s = readtext(f);
- s = s.replace(/<dc:title1>[^<>]*<\/dc:title1>|<dc:title2>[^<>]*<\/dc:title2>|<dc:title3>[^<>]*<\/dc:title3>|<publisher1>[^<>]*<\/publisher1>|<contributor1>[^<>]*<\/dc:contributor1>|<relation1>[^<>]*<\/relation1>/g, '');
- writetext(f, s);
- }
-
- function readtext(file, charset)
- {
- var text;
- var aso = new ActiveXObject('ADODB.Stream');
- aso.Mode = 3;
- aso.Type = 2;
- if (charset) aso.Charset = charset;
- else aso.Charset = 'utf-8';
- aso.Open();
- aso.LoadFromFile(file);
- text = aso.ReadText(-1);
- aso.Close();
- aso = null;
- return text;
- }
-
- function writetext(file, text, charset)
- {
- var aso = new ActiveXObject('ADODB.Stream');
- aso.Mode = 3;
- aso.Type = 2;
- if (charset) aso.Charset = charset;
- else aso.Charset = 'utf-8';
- aso.Open();
- aso.WriteText(text);
- aso.SaveToFile(file, 2);
- aso.Close();
- aso = null;
- }
复制代码
作者: 001011 时间: 2012-3-18 15:27
非常感谢 代码执行正常
作者: 001011 时间: 2012-3-18 15:47
本帖最后由 001011 于 2012-3-18 17:41 编辑
回复 13# powerbat
能否再麻烦您一下啊 把您的代码放到下面的程序里面运行 免得要运行两个程序
作者: 001011 时间: 2012-3-19 22:10
再次顶贴 盼高手飘过
作者: powerbat 时间: 2012-3-19 22:56
回复 15# 001011
把第一行改成- @set @n=0/*& echo off
- cscript.exe -e:jscript "%~f0"
- rem add your code here
- rem ...
- pause
-
- exit/b
- */
复制代码
作者: 001011 时间: 2012-3-19 23:18
回复 17# powerbat
改了以后放到VBS里面吗
作者: powerbat 时间: 2012-3-20 00:13
回复 18# 001011
改了后整个代码保存为一个bat文件。这是 bat + js 二合一。
作者: 001011 时间: 2012-3-20 10:21
哦 谢谢您咯
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |