Skip to content

How to Write or Overwrite a Text File in Batch Script

Learn how to use the > redirection operator in Windows Batch to create new files, overwrite existing ones, and handle special characters safely with ECHO and parenthesized blocks.

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.txttext
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.txttext
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.

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 ^ 

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

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.txttext
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.iniini
[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.
Navigation