1

拡張子が .xml のディレクトリ内のファイルを編集したいと考えています。1 つのファイルを編集するコードを作成しました。

@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

ディレクトリ内のすべてのファイルを編集したいと考えています。

4

1 に答える 1

1

あなたが尋ねたことをするだけです:

@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
于 2013-09-07T14:20:14.517 に答える