Search code examples
loopsbatch-fileappendcommand-promptwindows-xp-sp3

.bat file to loop through folder and append text files


I would like to set up a simple batch file that would loop through all the .txt files in a folder (the folder where the batch file is placed), and add the same heading line to each of those files. The heading line is defined in a separate text file.

So for example, let's say I have:

c:\SomeFolder\Headings.txt   
    --> I want to add this to the top of each of the text files in:

c:\SomeFolder\FolderWithTextFiles\
    --> ...by running the batch file:

c:\SomeFolder\FolderWithTextFiles\BatchFile.batch

Extra notes:
- No need to loop through subfolders


Solution

  • Windows batch does not have a native command to edit a file in place (other than to append data to it). So for each file, you need to create a temporary file with the desired content and then delete the original and rename the temp to the original. The delete and rename can be accomplished with a single MOVE command.

    @echo off
    set "header=c:\SomeFolder\Headings.txt"
    set "folder=c:\SomeFolder\FolderWithTextFiles"
    set "tempFile=%folder%\temp.txt"
    for %%F in ("%folder%\*.txt") do (
      type "%header%" >"%tempFile%"
      type "%%F" >>"%tempFile%"
      move /y "%tempFile%" "%%F" >nul
    )