批处理文件,用于编辑目录中的多个文件

时间:2013-09-07 11:07:07

标签: batch-file

我想编辑以.xml扩展名结尾的目录中的文件。我编写了编辑一个文件的代码:

@echo off
echo Removing...
for /f "skip=17 delims=*" %%a in (C:\xml\file1.xml) do (
echo %%a >>C:\newfile.xml
) >nul
echo Lines removed, rebuilding file...
xcopy C:\newfile.xml C:\file.xml /y >nul
echo File rebuilt, removing temporary files
del C:\newfile.xml /f /q >nul
msg * Done!
exit >nul

我想编辑目录中的所有文件。

1 个答案:

答案 0 :(得分:0)

正在做你所问的问题:

@echo off
for %%F in ("C:\xml\*.xml") do (
  echo Processing %%F
  echo Removing...
  for /f "skip=17 delims=*" %%a in ("%%F") do (
    echo %%a >>C:\newfile.xml
  ) >nul
  echo Lines removed, rebuilding file...
  xcopy C:\newfile.xml "%%F" /y >nul
  echo File rebuilt, removing temporary files
  del C:\newfile.xml /f /q >nul
  msg * Done!
  echo(
)
exit >nul

但我相信你想要"delims="(没有分隔符)或"tokens=*"(所有代币),而不是"delims=*"(在*处打破)。

此外,代码可以大大简化并提高效率:

@echo off
for %%F in ("C:\xml\*.xml") do (
  >"%%F.new" (for /f "skip=17 delims=" %%a in ("%%F") do echo %%a)
  move /y "%%F.new" "%%F" >nul
  echo %%F
)
msg * Done!
exit /b

更快,只要您不需要保留TAB字符就可以使用MORE,并且文件不会太大(在某些时候,重定向的MORE会在处理大文件时挂起等待按键)。

@echo off
for %%F in ("C:\xml\*.xml") do (
  more +17 "%%F" >"%%F.new"
  move /y "%%F.new" "%%F" >nul
  echo %%F
)
msg * Done!
exit /b