0

メモ帳に複数のテキスト ファイルがディレクトリ、つまり d:\documents に配置されています。バッチ ファイルで各ファイルの最後に行を追加したいのですが、60 または 70 を超えています。バッチ ファイルが必要です。この行を自動的に追加します。何かアイデアをください???

4

3 に答える 3

1

最終行の末尾に改行文字がないファイルについて心配する必要があるかもしれません。単に改行を追加すると、改行ではなく最終行に追加されます。

以下は、最後の行が改行文字で終わっているかどうかに関係なく、どのファイルでも機能するはずです。元のファイルの最後の行に終了の改行文字がない場合にのみ、改行を追加する前に条件付きで改行文字を追加します。

@echo off
setlocal enableDelayedExpansion
:: Define LF to contain a newline character
set LF=^


:: The above two blank lines are critical - DO NOT REMOVE

for %%F in (d:\documents\*.txt) do (
  findstr /v "!LF!" "%%F" >nul && (echo()
  (echo Your new line goes here)
)>>"%%F"

ファイル名に!. 万一、ファイル名に が含まれている場合は!、ループ内で遅延展開のオンとオフを切り替える必要があります。

@echo off
setlocal
:: Define LF to contain a newline character
set LF=^


:: The above two blank lines are critical - DO NOT REMOVE

for %%F in (d:\documents\*.txt) do (
  set "file=%%F"
  setlocal enableDelayedExpansion
  findstr /v "!LF!" "!file!" >nul && (echo()
  endlocal
  (echo Your new line goes here)
)>>"%%F"

アップデート

foxidrive がコメントで指摘したように、上記のソリューションは、で終わる Windows スタイルの行を、で終わる<CR><LF>Unix スタイル ファイルに追加します<LF>。このようなハイブリッド系統のタイプは望ましくない場合があります。

以下のコードは、正しい行ターミネータで行を適切に追加します。このコードは、 を含むすべてのファイルが<CR>Windows 形式であると想定しています。また、含まれていないファイルはすべて<LF>Windows 形式であると想定しています。

@echo off
setlocal disableDelayedExpansion

set "line=YOUR NEW LINE GOES HERE"

:: Define LF to contain a newline character
set LF=^


:: The above two blank lines are critical - DO NOT REMOVE

for %%F in (d:\test\test\*.txt) do (
  set "unix="
  findstr $ "%%F" >nul || cmd /v:on /c "findstr "!LF!" "%%F" >nul" && set unix=1
  cmd /v:on /c findstr /v "!LF!" "%%F" ^>nul && (
    if defined unix (cmd /v:on /c "echo(&echo(!lf!"|findstr /v $) else (echo()
  )
  if defined unix (
    cmd /v:on /c "echo(&echo(!line!!lf!"|findstr /v $
  ) else (
    setlocal enableDelayedExpansion
    echo(!line!
    endlocal
  )
)>>"%%F"
于 2013-10-17T01:05:25.997 に答える
0

次のようなことを試してください:

@echo off

>"%TEMP%\newline.txt" echo.

pushd "C:\documents"
for %%f in (*.txt) do copy /b "%%~f" + "%TEMP%\newline.txt" "%%~f"
popd

del "%TEMP%\temp.txt"
  • >"%TEMP%\temp.txt" echo.: 改行のみを含む (一時) ファイルを作成します。

  • pushd "C:\documents": 現在の作業ディレクトリを に変更しC:\documentsます。

  • for %%f in (*.txt) do ...: 現在のディレクトリ内のすべてのテキスト ファイルを反復処理します。

  • copy /b "%%~f" + "%TEMP%\newline.txt" "%%~f": 現在のファイルの内容と改行を一時ファイルから現在のファイルにコピーします。

于 2013-10-16T19:48:47.557 に答える
0

このコードは、CRLF がない場合はすべてのファイルの末尾に追加し、各ファイルの最後の行として
テキストを追加します。This is the last line

@echo off
for /f "delims=" %%a in ('dir *.txt /a:-d /b') do (
   findstr /v ".*$" "%%a" >nul && (>>"%%a" echo.)
   >>"%%a" echo This is the last line
)
于 2013-10-17T04:23:23.133 に答える