这个符号的功能是什么,“|”在批处理文件中执行(shift +)? 为什么当我尝试运行以下代码时:
@echo off
echo ___________ __ .__
echo \__ ___/___ _______/ |_|__| ____ ____
echo | |_/ __ \ / ___/\ __\ |/ \ / ___\
echo | |\ ___/ \___ \ | | | | | \/ /_/ >
echo |____| \___ >____ > |__| |__|___| /\___ /
echo \/ \/ \//_____/
或只是
echo |
程序刚刚启动,即使我放
也会立即退出pause
最后
由于
答案 0 :(得分:5)
正如其他人所说,|
是管道运算符,它接受左边任何命令的输出并将其作为输入传递给右边的命令。如果您想将字符视为文字,则必须将其转义为^|
或引用。但是你的输出中不需要引号。
您还可以使用需要转义的重定向运算符>
。
您可能遇到其他需要转义或引用的字符(有时也称为“毒药”字符):
escape
character sequence
^ ^^
| ^|
< ^<
> ^>
& ^&
% %%
如果使用不带引号和非转义的|
编写一个不是有效管道操作的命令,那么它会生成致命的语法错误,并且脚本会立即终止。
您的代码可以通过转义所有“毒药”字符来修复。但添加^
转义字符会使源代码几乎不可读:
@echo off
echo ___________ __ .__
echo \__ ___/___ _______/ ^|_^|__^| ____ ____
echo ^| ^|_/ __ \ / ___/\ __\ ^|/ \ / ___\
echo ^| ^|\ ___/ \___ \ ^| ^| ^| ^| ^| \/ /_/ ^>
echo ^|____^| \___ ^>____ ^> ^|__^| ^|__^|___^| /\___ /
echo \/ \/ \//_____/
有一些编码技术可以让你在源代码中保留原始外观,并且仍能获得所需的输出。
1)带引号的简单FOR
限制:输出不能包含"
,*
或?
for %%A in (
" ___________ __ .__ "
" \__ ___/___ _______/ |_|__| ____ ____ "
" | |_/ __ \ / ___/\ __\ |/ \ / ___\ "
" | |\ ___/ \___ \ | | | | | \/ /_/ > "
" |____| \___ >____ > |__| |__|___| /\___ / "
" \/ \/ \//_____/ "
) do echo %%~A
~
中的%%~A
修饰符会删除封闭的引号
2)标记文本与FOR / F结合使用FINDSTR
限制:没有输出行可以以:
@echo off
::: ___________ __ .__
::: \__ ___/___ _______/ |_|__| ____ ____
::: | |_/ __ \ / ___/\ __\ |/ \ / ___\
::: | |\ ___/ \___ \ | | | | | \/ /_/ >
::: |____| \___ >____ > |__| |__|___| /\___ /
::: \/ \/ \//_____/
for /f "delims=: tokens=*" %%A in ('findstr "^:::" "%~f0"') do @echo(%%A
我选择了:::
作为邮件标签,因为::
通常用作评论。
上述方法效果很好,但如果要指定多条消息则不方便。这可以通过标签更具创造性来轻松解决。 :print
子程序也很方便
@echo off
::Testing: ___________ __ .__
::Testing: \__ ___/___ _______/ |_|__| ____ ____
::Testing: | |_/ __ \ / ___/\ __\ |/ \ / ___\
::Testing: | |\ ___/ \___ \ | | | | | \/ /_/ >
::Testing: |____| \___ >____ > |__| |__|___| /\___ /
::Testing: \/ \/ \//_____/
::Testing:
::Test: ___________ __
::Test: \__ ___/___ _______/ |_
::Test: | |_/ __ \ / ___/\ __\
::Test: | |\ ___/ \___ \ | |
::Test: |____| \___ >____ > |__|
::Test: \/ \/
::Test:
call :print Testing
call :print Test
exit /b
:print label
for /f "delims=: tokens=1*" %%A in ('findstr "^::%~1:" "%~f0"') do echo(%%B
exit /b
为了获得更高的灵活性 - 请查看How would I use some multi line ascii art as my characters for a counter? (batch)。
特别是,my answer和Aacini's answer都为您提供了使用您选择的横幅字体打印几乎所有字符串的选项。
答案 1 :(得分:4)
它是一个&#34;管道&#34;运营商。
e.g。
commandA | commandB
将commandA
和PIPES的输出作为commandB
的输入。您必须转义管道字符才能将其视为明文字符,而不是管道:
echo ^|
答案 2 :(得分:0)
管道&#34; |&#34;是嵌套两个命令。你得到第一个命令的输出,而nest是第二个命令。