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

[文件操作] [已解决]批处理如何删除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>
这些节点有可能是有值的  也有可能是空值
文件路径在附件中


谢谢各位老师
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
非常好的论坛

能否上传一个XML文件让我测试一下代码?

TOP

在附件中呀
非常好的论坛

TOP

  1. sed -i "s#<dc:title1>[^<]\+</dc:title1>##" dc.xml
复制代码

TOP

没有什么效果呀
非常好的论坛

TOP

回复 5# 001011


你用的哪个版本的sed?

TOP

凡事带数字的节点  都是辅助节点  用完后就要删除
非常好的论坛

TOP

回复 7# 001011


我的用的一个软件做的这些文件
这些文件是UTF-8格式的
sed我没有用
谢谢您

sed你没用那现在就用一下吧
不用单独发消息给我,你直接回复我的帖子,论坛会自动提醒我。

TOP

  1. sed -i "s#<dc:title1>[^<]\+</dc:title1>##; s#<dc:title2>[^<]\+</dc:title2>##" dc.xml
复制代码
其它节点照着这个格式继续就行了

TOP

抱歉 我实在是不知道怎么用   复制到BAT里面运行吗
非常好的论坛

TOP

回复 10# 001011
需要外部命令 SED.EXE
  1. @echo off
  2. for /f %%i in ('dir /b /a-d /s "E:\a\dc.xml" "E:\a\a.opf"') do (
  3. 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"
  4. )
  5. pause
复制代码
1

评分人数

TOP

回复 10# 001011


是的,把sed.exe和test.bat放在同一个目录

TOP

sed好像不支持utf-8吧。
使用前注意备份。
  1. @set @n=0//& cscript.exe -e:jscript "%~f0" &pause&exit/b
  2. strQuery = "select name from CIM_DataFile where "
  3.     + " drive='E:' and path like '\\\\A\\\\%' and ("
  4.     + "(filename='a' and extension='opf') or "
  5.     + "(filename='dc' and extension='xml'))";
  6. wmi = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer();
  7. colFiles = wmi.ExecQuery(strQuery, "WQL", 48);
  8. e = new Enumerator(colFiles);
  9. for (; !e.atEnd(); e.moveNext())
  10. {
  11.     f = e.item().name;
  12.     s = readtext(f);
  13.     s = s.replace(/<dc:title1>[^<>]*<\/dc:title1>|<dc:title2>[^<>]*<\/dc:title2>|<dc:title3>[^<>]*<\/dc:title3>|<publisher1>[^<>]*<\/publisher1>|<contributor1>[^<>]*<\/dc:contributor1>|<relation1>[^<>]*<\/relation1>/g, '');
  14.     writetext(f, s);
  15. }
  16. function readtext(file, charset)
  17. {
  18.     var text;
  19.     var aso = new ActiveXObject('ADODB.Stream');
  20.     aso.Mode = 3;
  21.     aso.Type = 2;
  22.     if (charset) aso.Charset = charset;
  23.     else aso.Charset = 'utf-8';
  24.     aso.Open();
  25.     aso.LoadFromFile(file);
  26.     text = aso.ReadText(-1);
  27.     aso.Close();
  28.     aso = null;
  29.     return text;
  30. }
  31. function writetext(file, text, charset)
  32. {
  33.     var aso = new ActiveXObject('ADODB.Stream');
  34.     aso.Mode = 3;
  35.     aso.Type = 2;
  36.     if (charset) aso.Charset = charset;
  37.     else aso.Charset = 'utf-8';
  38.     aso.Open();
  39.     aso.WriteText(text);
  40.     aso.SaveToFile(file, 2);
  41.     aso.Close();
  42.     aso = null;
  43. }
复制代码
2

评分人数

TOP

非常感谢 代码执行正常
非常好的论坛

TOP

本帖最后由 001011 于 2012-3-18 17:41 编辑

回复 13# powerbat


    能否再麻烦您一下啊   把您的代码放到下面的程序里面运行 免得要运行两个程序
非常好的论坛

TOP

返回列表