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

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

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

源文件及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
复制代码

TOP

回复 2# qixiaobin0715
谢谢 我网上回去试试

TOP

加一个临时文件 提升一点效率  当然 你也 可以放在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
复制代码

TOP

单词分界符老看着别扭,前面用了/b,\<就多余了,\>可用:代替。
这样,"345: 789:",看着美观一些。

TOP

回复 5# qixiaobin0715

我晚上试了下,没有实现删除功能,具体是要实现同文件夹下XML文件全部删除特定行,删除行很多,456  789   121314这样连续的三行,再次请教下大佬,现在第二个代码实现的内容不变生成一个新文件和一个无格式文件

TOP

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

TOP

回复 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
复制代码

TOP

@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
这是最后可成功执行的代码
中和了两位的内容完成了,谢谢两位大佬的帮助

TOP

返回列表