символ пакетного эхо-сигнала, вызывающий неожиданное поведение - PullRequest
21 голосов
/ 06 декабря 2009

У меня есть переменная в моем пакетном файле, и она содержит символ канала (этот: |), поэтому при выводе переменной я получаю ошибку о нераспознанной внутренней / внешней команде.

Мне нужен способ, чтобы заставить его отображать его правильно или лучше, но все же удалите все после и включая | символ, а также любые дополнительные пробелы перед ним.

Ответы [ 4 ]

39 голосов
/ 06 декабря 2009

Есть несколько специальных символов, которые обычно должны быть экранированы при использовании в пакетных файлах Windows. Вот частичный список: < > & | ^ %

Экранирующий символ - ^. Таким образом, чтобы получить литерал |, вы должны сделать это:

echo ^|

Когда специальный символ находится в переменной, он становится немного сложнее. Но если вы используете специальный синтаксис, вы можете заменить символы в переменной следующим образом:

set X=A^|B

REM replace pipe character with underscore
set Y=%X:|=_%

echo %Y%
REM prints "A_B"
5 голосов
/ 01 января 2016

Вы должны избежать | символ перед печатью вар. Следующие отпечатки a | b

@echo off

set x=a^|b
echo %x:|=^|%
2 голосов
/ 06 декабря 2009

убежать

echo \|

или в кавычках

echo "|"
0 голосов
/ 13 февраля 2019
set X=%0^|callset.bat
set Y=%X:|=_%
echo %Y%
echo %X% _ %Y%
REM activate callset | more

REM и у вас должна быть бесконечная труба. Перерыв CTRL + C дважды Ctrl Break REM печатает «Процесс пытался записать в несуществующий канал».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...