Skip to main content

How to Write or Overwrite a Text File in Batch Script

Creating, modifying, and logging information to files are core scripting activities. In Windows Batch, the primary mechanism for writing or overwriting a file is output redirection. By redirecting the output of a command (like ECHO), you can easily create new files or completely replace the contents of existing ones.

This guide explains how to use the single redirection operator (>), demonstrates how to handle special characters that would otherwise break your script, and provides a robust method for writing multiple lines of text at once.

The "Write/Overwrite" Redirection Operator: >

The greater-than symbol (>) is the standard output redirection operator. It tells the command processor to take whatever output a command would normally print to the console and send it to a specified file instead.

Its behavior is simple and powerful:

  • If the target file does not exist, it will be created.
  • If the target file already exists, its contents will be completely erased and replaced with the new output.

Creating a New File with ECHO

The most common way to generate text for a file is with the ECHO command.

Let's create a new file named logfile.txt with the following script:

@ECHO OFF
REM This command creates a new file with a single line of text.
ECHO Server is online. > logfile.txt

After running the script, logfile.txt is created with the following content:

logfile.txt
Server is online. 

Overwriting an Existing File's Content

The > operator does not add to a file; it replaces. This is useful for resetting logs or updating status files.

Imagine logfile.txt already exists with the content "Server is online.". Now we run a different command.

@ECHO OFF
REM This command overwrites the existing content of logfile.txt.
ECHO All tasks completed successfully. > logfile.txt

Now, the original content is completely gone, replaced by the new text.

logfile.txt
All tasks completed successfully. 

Common Pitfalls and How to Solve Them

Writing text to a file can fail unexpectedly, especially when dealing with special characters or empty lines.

Problem: Special Characters (<, >, &, |, ^) Break the Command

The command processor interprets redirection and command-chaining characters before executing the ECHO command. If your text contains these characters, the script will fail.

Let's see the error.

@ECHO OFF
REM This command will fail spectacularly.
ECHO The characters are <, >, &, | and ^ > characters.txt

Output:

The system cannot find the file specified.
'&' is not recognized as an internal or external command,
operable program or batch file.
'|' is not recognized as an internal or external command,
operable program or batch file.
'^' is not recognized as an internal or external command,
operable program or batch file.
note

This fails because cmd.exe sees the < and > as redirection operators and & and | as command separators.

Solution: Use a Parenthesized Block

The most robust solution is to wrap the ECHO command in parentheses. This makes the command processor evaluate the redirection (> characters.txt) for the entire block, treating the content inside the parentheses as literal text to be processed by ECHO.

@ECHO OFF
REM This is the correct, safe way to handle special characters.
(ECHO The characters are <, >, &, | and ^) > characters.txt

So, the characters.txt file is created:

The characters are <, >, &, | and ^ 
note

Alternatively, you could escape each character with a caret (^<, ^>, ^&), but this is tedious and error-prone.

Problem: Writing a Blank Line Fails

A common mistake is to try writing a blank line using just ECHO.

Let's see the error:

@ECHO OFF
REM This does NOT write a blank line to the file.
ECHO > blank.txt

This command simply prints the status of ECHO to the console and creates an empty (0-byte) file.

ECHO is on.

Solution: Use ECHO.

The correct syntax for echoing a blank line is ECHO. (with a dot immediately following the command).

@ECHO OFF
REM This correctly writes a single blank line.
ECHO. > blank.txt

This creates blank.txt with a single new line, which is the expected result.

Problem: Writing a Variable's Value with Special Characters

This issue is a combination of the special character problem and variable expansion.

Let's see the error:

@ECHO OFF
SET "myVar=This is a > test"
REM This will fail.
ECHO %myVar% > output.txt
note

This fails because after %myVar% is replaced, the command becomes ECHO This is a > test > output.txt, which is invalid syntax.

Solution: Parentheses Again

The parenthesized block is the definitive solution for safely echoing variables that might contain user input or special characters.

@ECHO OFF
SET "myVar=This is a > test"
REM This works perfectly.
(ECHO %myVar%) > output.txt

So, the output.txt file created is:

output.txt
This is a > test 

Writing Multiple Lines to a File Efficiently

Instead of redirecting each line individually, you can use a single command block to write multiple lines. This is faster and cleaner, as the file is only opened and written to once.

@ECHO OFF
REM Writing a multi-line configuration file in one go.

(
ECHO [Settings]
ECHO Version=1.2
ECHO.
ECHO ; Note: Path can contain special characters like & or ^
ECHO Path=C:\Program Files (x86)\My App & Tools\
) > config.ini

and the resulting config.ini file is

config.ini
[Settings]
Version=1.2

; Note: Path can contain special characters like & or ^
Path=C:\Program Files (x86)\My App & Tools\

Conclusion

The > redirection operator is the standard tool for writing new files or overwriting existing ones in batch scripts. While simple in principle, its behavior with special characters can cause frustrating errors.

  • By adopting the habit of wrapping your ECHO statements in parentheses, like (ECHO ...)> filename.txt, you can preemptively solve the vast majority of these issues, leading to more robust and reliable scripts.
  • For blank lines, always use the ECHO. syntax.