如何为多个文件添加书签和删除行

时间:2014-12-22 13:04:59

标签: batch-file

我想预订标记并删除多个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建议

1 个答案:

答案 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

这应该适合您 - 只需根据需要更改目录名称