echo off bat file disables display of each command before execution; combined with @ it suppresses itself, preventing screen clutter and the ‘ECHO is off’ error when variables are empty.
@echo off
echo Welcome to the script
pause
What is echo off and when to use it?
echo off is a Windows batch command that turns off command echoing for the remainder of the script. Without it, every line appears twice. When preceded by @ (i.e., @echo off), it hides even that single line. An alternative is placing @ on each command individually, but @echo off is cleaner. Real-world use: any production batch script (logon scripts, build automation, file-processing loops) where you want only intentional output. The command works identically across all Windows versions (7, 10, 11, Server 2016+).
Tested on Windows 11 Pro 23H2 with CMD.EXE version 10.0.22621.1.
Syntax
ECHO [ON | OFF]
ECHO [message]
ECHO /?
@ command
# Typical usage
@ECHO OFF
REM Script continues with echoing suppressed
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| ON | Keyword | ON | Enable command echoing (show each command before execution) |
| OFF | Keyword | — | Disable command echoing; commands themselves are hidden, output shown |
| message | String | — | Display the given text on screen; no quotation marks required |
| /? | Switch | — | Display help text for ECHO command |
| @ | Prefix | — | Suppress echoing of the line it precedes (usable on any command) |
| : | Literal | — | Used with echo (e.g., ECHO:) to output a blank line, avoiding ‘ECHO is off’ |
Usage Examples
1. Basic script with @echo off
@echo off
echo Welcome to the script
pause
Explanation: The first line hides itself and turns off echoing for all subsequent lines. Only ‘Welcome to the script’ and ‘Press any key…’ appear.
2. Avoiding ‘ECHO is off’ when writing empty variable to file
@echo off
set "var="
if not defined var echo:>output.txt
echo The file was created.
Explanation: Using echo: (colon) outputs a blank line even when the variable is empty, preventing ‘ECHO is off’ from being written to the file.
3. Escaping special characters
@echo off
echo Salary is ^> 50000
echo Name ^| Username ^| Expiry Date
pause
Explanation: The caret (^) escapes special characters like >, |, & so they are treated as literals and displayed correctly.
Troubleshooting & Common Errors
| Error / Message | Root Cause | Resolution |
|---|---|---|
| ‘ECHO is off’ | Redirection of echo with empty or undefined variable |
Use echo: instead of echo alone; check variable with if defined before echoing. |
Command visible despite echo off |
Missing @ prefix on the echo off line itself |
Use @echo off (with the @) as the first line. |
| Blank line not appearing | Using echo alone with no message yields ‘ECHO is off’ |
Use echo. or echo: to output a single blank line. |
Exit Codes
| Code | Meaning | Operational Impact |
|---|---|---|
| 0 | Success | ECHO executed without errors; output may be blank if no message given |
| ‘ECHO is off’ | Not an exit code but output text | Indicates no operand or empty variable; script continues, but unwanted string appears |
Closing Tip
Always use @echo off as the first line in any batch script, and output blank lines with echo. to avoid the ‘ECHO is off’ message in logs and file redirections.
Frequently Asked Questions
What is the difference between @echo off and echo off?
Answer: @echo off suppresses the echo of the command itself; echo off echoes the command before disabling subsequent echoing. Placing @ before echo off prevents the echo off line from being printed. Without @, the batch file displays the echo off command. Use @echo off for clean output. For a single command, prefix with @ to hide only that line.
When should I use the @ prefix instead of @echo off?
Answer: Use @ for individual commands you want to hide without globally disabling echo. Example: @dir *.log hides only the dir command. For error handling, @ prevents the error message from showing the command itself. Full suppression requires @echo off plus redirecting stderr with 2>nul.
How do I fix the ‘ECHO is off’ error when using echo command in a batch file?
Answer: This occurs when echo is invoked without arguments or the variable is empty. Fix: output blank line with a period. Or check variable before echoing: if defined myvar echo %myvar% else echo.
Does @echo off work in Windows Command Prompt on all versions, or in PowerShell or Linux?
Answer: @echo off is supported in Windows Command Prompt (cmd.exe) on all Windows versions. It is not valid in PowerShell or Linux shells. In PowerShell, use Set-StrictMode or redirect output with > to suppress commands.
What is the fastest way to suppress all command output in a batch file for performance?
Answer: Place @echo off at the top and redirect stdout and stderr to nul using >nul 2>&1 on each command to avoid disk I/O overhead. Example: @echo off your_command >nul 2>&1

Command Line Expert & Software Engineer
Welcome! I’m Thomas Heinrich, a software engineer and system administrator with a deep passion for the Command Line Interface (CLI). With years of experience navigating the terminal, building backend architectures, and automating server deployments, I created this space to share practical, real-world terminal knowledge.
Whether you are a beginner taking your first steps in a Linux environment or a seasoned DevOps engineer looking to optimize your deployment scripts, you will find actionable solutions here. My goal is to help you ditch the mouse, speed up your workflow, and harness the full power of the command line.