我想预订标记并删除多个XML文件中的行。我是批处理文件编程的新手。任何人都可以帮我创建批处理文件,该文件应该读取文件并删除包含该字符串的行。
例如:下面是一个XML文件的内容,我想在其中删除包含“cimage.gif”和“appcover”的行。
<file>/cimages/ncomms_cimage.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/abs/ncomms6646.html</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f1.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f2.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f3.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f4.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f5.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/carousel/ncomms6646-f6.jpg</file>
<file>/ncomms/2014/141223/ncomms6646/compound/ncomms6646_ci.html</file>
<file>/ncomms/2014/141223/ncomms6646/covers/appcover-ncomms-v5-ncomms6646-150x193.png</file>
<file>/ncomms/2014/141223/ncomms6646/covers/appcover-ncomms-v5-ncomms6646-450x579.png</file>
<file>/ncomms/2014/141223/ncomms6646/covers/appcover-ncomms-v5-ncomms6646-75x100.png</file>
<file>/ncomms/2014/141223/ncomms6646/extref/ncomms6646-s1.pdf</file>
<file>/ncomms/2014/141223/ncomms6646/extref/ncomms6646-s2.xls</file>
<file>/ncomms/2014/141223/ncomms6646/extref/ncomms6646-s3.xls</file>
<file>/ncomms/2014/141223/ncomms6646/extref/ncomms6646-s4.avi</file>
<file>/ncomms/2014/141223/ncomms6646/fig_tab/ncomms6646_F1.html</file>
<file>/ncomms/2014/141223/ncomms6646/fig_tab/ncomms6646_F2.html</file>
<file>/ncomms/2014/141223/ncomms6646/fig_tab/ncomms6646_F3.html</file>
<file>/ncomms/2014/141223/ncomms6646/fig_tab/ncomms6646_F4.html</file>
<file>/ncomms/2014/141223/ncomms6646/fig_tab/ncomms6646_F5.html</file>
我想删除包含“appcover”和“cimage”
的行Coudld你请更新代码给我?很抱歉,因为我刚接触批处理文件,这取决于您的编码。
此外,如果我想编辑10个文件,我不能将所有xmls放在一个文件夹中,因为所有xmls的文件名只是pushlive-manifest.xml,所有这些文件都存储在他们自己的diretories中。有没有办法把这个批处理文件放在路径文件夹中,它应该读取根文件夹中子目录中的xmls。
例如:路由目录路径为:D:/ abc xmls位于“D:/ abc / 123”,“D:/ abc / 121”“D:/ abc / 125”等等。
所以我可以将批处理文件放在D:/ abc文件夹中,如果我运行批处理文件,它应该读取xmls wch在“D:/ abc / 123”,“D:/ abc / 121”“D中:/ abc / 125“等等。
期待您的回复!
我改变了编码如下:
@ECHO OFF
SETLOCAL
SET "sourcedir=D:\test"
FOR /r "%sourcedir%" %%a IN (pushlive-manifest*.xml) DO (
FINDSTR /v /L "cimage.jpg appcover" "%%a" >"%%~dpna.txt"
move /y "%%a" "%%~na"
)
GOTO :EOF
因此它不会处理其他xmls,但它只为其dir中的每个xml创建一个txt。并且out文件没有覆盖原始的xml,它仍然生成txt文件。这次它没有创建输入xml到txt文件的副本,因为它正在删除xml中的expecte dlines并将其转换为txt。 PL建议
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR %%a IN ("%sourcedir%\*.xml") DO (
FINDSTR /v /L "cimage.gif appcover" "%%a" >"%%~dpna.txt"
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
在与扫描的目录相同的目录中生成一个名为 samebasename .txt的新文件。目前尚不清楚是否要删除包含"cimage.gif" **OR** "appcover"
的行或包含"cimage.gif" and "appcover"
的行。此代码假定前者。
修订要求的修订:在树中搜索.xml
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /r "%sourcedir%" %%a IN (*.xml) DO (
FINDSTR /v /L "cimage.gif appcover" "%%a" >"%%~dpna.txt"
)
GOTO :EOF
请注意,在Windows世界中,\
是目录分隔符,/
是开关指示符。 Windows经常(但不总是)进行翻译。最好使用正确的表格。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /r "%sourcedir%" %%a IN (pushlive-manifest*.xml) DO (
FINDSTR /v /L "cimage.gif appcover" "%%a" >"%%~dpna.LMX"
Move /y "%%~dpna.LMX" "%%~nxa"
)
GOTO :EOF
这应该适合您 - 只需根据需要更改目录名称