标题: [文件操作] 求助批处理如何删除xml文档里特定某几行内容? [打印本页]
作者: zzwei 时间: 2020-12-16 23:21 标题: 求助批处理如何删除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
作者: qixiaobin0715 时间: 2020-12-17 09:29
源文件及bat文件都要求编码为ANSI- @echo off
- setlocal enabledelayedexpansion
- set n=0
- (for /f "delims=" %%a in ('findstr /n ".*" abc.xml') do (
- set "str=%%a"
- set /a n+=1
- echo !n!|findstr /bev "345 789">nul&&echo !str:*:=!
- ))>#abc.xml
- pause
复制代码
作者: zzwei 时间: 2020-12-17 10:36
回复 2# qixiaobin0715
谢谢 我网上回去试试
作者: terse 时间: 2020-12-17 14:40
加一个临时文件 提升一点效率 当然 你也 可以放在FOR里运行- @echo off
- findstr /n .* "c.xml" | findstr /vb "\<345\> \<789\>" >$_t
- >"$$c.xml" (for /f "tokens=1*delims=:" %%a in ($_t) do echo;%%b)
- pause
复制代码
作者: qixiaobin0715 时间: 2020-12-17 15:38
单词分界符老看着别扭,前面用了/b,\<就多余了,\>可用:代替。
这样,"345: 789:",看着美观一些。
作者: zzwei 时间: 2020-12-17 22:15
回复 5# qixiaobin0715
我晚上试了下,没有实现删除功能,具体是要实现同文件夹下XML文件全部删除特定行,删除行很多,456 789 121314这样连续的三行,再次请教下大佬,现在第二个代码实现的内容不变生成一个新文件和一个无格式文件
作者: went 时间: 2020-12-17 22:39
- @echo off & cd /d "%~dp0"
- setlocal enabledelayedexpansion
- set "delLine=3,4,5,7,8,9,13,13,14,"
- 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
复制代码
作者: terse 时间: 2020-12-17 23:39
回复 6# zzwei
是的 源文件内容不变 如果$#c.xml d 内容符合要求 运行下面的试- @echo off
- set "line=345: 789:"
- for /f "delims=" %%i in ('dir /b /a-d *.xml') do (
- (for /f "tokens=1*delims=:" %%a in ('findstr /n .* "%%i" ^| findstr /vb "%line%"') do echo;%%b)>$_t
- move $_t "%%i"
- )
- pause
复制代码
作者: zzwei 时间: 2020-12-18 00: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
这是最后可成功执行的代码
中和了两位的内容完成了,谢谢两位大佬的帮助
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |