使用批处理文件将文本添加到许多现有.txt文件的开头

时间:2016-12-22 19:50:50

标签: batch-file

我需要一个批处理文件,它会在数百个.txt文件内容开头的新行中添加“写入”文本,而不删除任何现有文本。我在这里发现了一些对我不起作用的东西。有人有建议吗?

这是我正在使用的代码:

for /r %%a in (*.txt) do (
    echo ---- %%a before ----
    type "%%a"
    echo --------------------

    echo Write In > "%%a.tmp"
    type "%%a" >> "%%a.tmp"
    del "%%a"
    move "%%a.tmp" "%%a"

    echo ---- %%a after ----
    type "%%a"
    echo --------------------
)
pause

它没有做任何事情

3 个答案:

答案 0 :(得分:1)

我很可能会这样做:

rem // Create temporary header file:
> "head.txt" echo Write In
rem // Iterate all text files in current directory:
for %%F in ("*.txt") do (
    rem /* Combine header and currently iterated text file into a temporary file;
    rem    there cannot arise any file name conflicts (like temporary files becoming
    rem    iterated also unintendedly, or temporary files overwriting files to handle),
    rem    because the extension of the temporary files differ from the text files: */
    copy /B "head.txt"+"%%~F" "%%~F.tmp"
    rem // Overwrite original text file by temporary file, erase the latter:
    move /Y "%%~F.tmp" "%%~F"
)
rem // Erase the temporary header file:
del "head.txt"

答案 1 :(得分:0)

我找到了一种不太干净的方法,并且需要一段时间来处理更大的文件,但它对我来说很有用:

@echo off
for /r "%~dp0" %%f in (*.txt) do (
echo Processing file %%f
>"%%~f.2" (
echo "Text to append here"
type "%%~f"
)
del "%%~f"
ren "%%~f.2" "%%~nxf"
)
pause

以递归方式循环遍历batch-files目录中的所有.txt文件 创建一个名为oldName.txt.2的新文件,并将其与要添加的文本及其余旧文件内容一起归档。
删除旧文件并将新文件重命名为旧文件的名称 需要在文件结尾添加.2以确保循环不再处理它。

当然,您可以通过乘以回波线来添加多条线 您也可以在type行之后添加回显线,将文本添加到文件末尾。

答案 2 :(得分:0)

您可以简单地使用Linux Sed命令将标头插入文件中。

sed -i '1s/^/This is my header\n/' filename
e.g. sed -i '1s/^/Write In\n/' myfile.txt

这可以应用于目录下的多个文件:

用于.txt文件

for file in *.txt
do
  sed -i '1s/^/This is my header\n/' $file
done

对于CSV文件

for file in *.csv
do
  sed -i '1s/^/This is my header\n/' $file  
done