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 在他的评论中指出的那样,上述解决方案<CR><LF>将以<LF>. 这样的混合线类型可能是不可取的。

下面的代码将正确地附加具有正确行终止符的行。该代码假定任何包含 a 的文件<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

如果没有,此代码将在每个文件的末尾添加一个 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 回答
0

Try something like this:

@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.: create a (temporary) file with just a newline in it.

  • pushd "C:\documents": change the current working directory to C:\documents.

  • for %%f in (*.txt) do ...: iterate over all text files in the current directory.

  • copy /b "%%~f" + "%TEMP%\newline.txt" "%%~f": copy the content of the current file plus the newline from the temporary file back to the current file.

于 2013-10-16T19:48:47.557 回答