I have a variable in my batch file and it contains the pipe symbol (this one: |) so when I echo the variable I get an error about a unrecognized internal/external command.
You must escape the | character before you print the var. The following prints a|b
@echo off
set x=a^|b
echo %x:|=^|%
There are several special characters that generally must be escaped when used in Windows batch files. Here is a partial list: < > & | ^ %
The escape character is ^
. So to get a literal |
, you should do this:
echo ^|
When the special character is in a variable, it becomes a bit harder. But if you use special syntax, you can replace characters in a variable like this:
set X=A^|B
REM replace pipe character with underscore
set Y=%X:|=_%
echo %Y%
REM prints "A_B"
set X=%0^|callset.bat
set Y=%X:|=_%
echo %Y%
echo %X% _ %Y%
REM activate callset | more
REM and you should have infinite pipe. Break CTRL+C twice Ctrl Break REM prints "The process tried to write to a nonexistent pipe."
escape it
echo \|
or wrap in quotes
echo "|"