找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29575|回复: 8

[文件操作] 求助批处理如何删除xml文档里特定某几行内容?

[复制链接]
发表于 2020-12-16 23:21:45 | 显示全部楼层 |阅读模式
l例如以下的文档  需要删除第345行和第789行内容,纯萌新,求代码,谢谢各位大神帮助了
<?xml version="1.0" encoding="utf-8"?>
<tier name=
  <unit name="aaaaa
    <item name="abbbbbb
      <process name="bbnnnnn
    </item>
    <item name="b) mmmmmm
      <process name="1gffgfgfgf
    </item>
    <item name="crrytytyty
      <process nameukyhiyuiyuiy
    </item>
    <item name="bxcvbcvbcvbcv
      <process namewerewrwetert=r
发表于 2020-12-17 09:29:16 | 显示全部楼层
源文件及bat文件都要求编码为ANSI
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. (for /f "delims=" %%a in ('findstr /n ".*" abc.xml') do (
  5.     set "str=%%a"
  6.     set /a n+=1
  7.     echo !n!|findstr /bev "345 789">nul&&echo !str:*:=!
  8. ))>#abc.xml
  9. pause
复制代码
 楼主| 发表于 2020-12-17 10:36:01 | 显示全部楼层
回复 2# qixiaobin0715
谢谢 我网上回去试试
发表于 2020-12-17 14:40:44 | 显示全部楼层
加一个临时文件 提升一点效率  当然 你也 可以放在FOR里运行
  1. @echo off
  2. findstr /n .* "c.xml" | findstr /vb "\<345\> \<789\>" >$_t
  3. >"$$c.xml" (for /f "tokens=1*delims=:" %%a in ($_t) do echo;%%b)
  4. pause
复制代码
发表于 2020-12-17 15:38:38 | 显示全部楼层
单词分界符老看着别扭,前面用了/b,\<就多余了,\>可用:代替。
这样,"345: 789:",看着美观一些。
 楼主| 发表于 2020-12-17 22:15:13 | 显示全部楼层
回复 5# qixiaobin0715

我晚上试了下,没有实现删除功能,具体是要实现同文件夹下XML文件全部删除特定行,删除行很多,456  789   121314这样连续的三行,再次请教下大佬,现在第二个代码实现的内容不变生成一个新文件和一个无格式文件
发表于 2020-12-17 22:39:29 | 显示全部楼层
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "delLine=3,4,5,7,8,9,13,13,14,"
  4. for %%i in ("*.xml") do (
  5.         echo %%i
  6.         (
  7.                 for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  8.                         if "!delLine:%%a,=!"=="!delLine!" (
  9.                                 echo.%%b
  10.                         )
  11.                 )
  12.         ) >"%%i_new"
  13.         move /y "%%i_new" "%%i"
  14.         echo -----------------------------------
  15. )
  16. pause&exit
复制代码
发表于 2020-12-17 23:39:02 | 显示全部楼层
回复 6# zzwei
是的 源文件内容不变  如果$#c.xml d 内容符合要求 运行下面的试
  1. @echo off
  2. set "line=345: 789:"
  3. for /f "delims=" %%i in ('dir  /b /a-d *.xml') do (
  4.      (for /f "tokens=1*delims=:" %%a in ('findstr /n .* "%%i" ^| findstr /vb "%line%"') do echo;%%b)>$_t
  5.      move  $_t  "%%i"
  6. )
  7. pause
复制代码
 楼主| 发表于 2020-12-18 00:35:35 | 显示全部楼层
@echo off & cd /d "%~dp0"
setlocal enabledelayedexpansion
set "delLine= 13: 14: 15: 30: 31: 32: 33: 34: 35: 36: 37: 38: 50: 51: 52: 70: 71: 72: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 107: 108: 109: 115: 116: 117: "
for %%i in ("*.xml") do (
        echo %%i
        (
                for /f "tokens=1* delims=: " %%a in ('findstr /n .* "%%i"') do (
                        if "!delLine: %%a: =!"=="!delLine!" (
                                echo.%%b
                        )
                )
        ) >"%%i_new"
        move /y "%%i_new" "%%i"
        echo -----------------------------------
)
pause&exit
这是最后可成功执行的代码
中和了两位的内容完成了,谢谢两位大佬的帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 07:17 , Processed in 0.019676 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表