繁体   English   中英

如何让 Windows CMD ECHO 只回显一个字符?

[英]How to get Windows CMD ECHO to echo exactly one single character?

Windows Internal CMD ECHO的(非官方)文档展示了一些有趣的技巧。 但是,我还没有找到回显单个字符的方法

快速说明,下面使用的od ,来自 Git(或 Gow)安装

例如,这个 echo 是带有 'windows' 换行符的'a'\\r\\n ):

>echo a| od -A x -t x1z -v -
000000 61 0d 0a                                         >a..<
000003

这个技巧(现在也在文档中)回声没什么:

><nul (set/p _any_variable=)| od -A x -t x1z -v -
000000

所以我希望这只会回应“a”:

><nul (set/p _any_variable=a)| od -A x -t x1z -v -
000000 61 20                                            >a <
000002  

但它在最后增加了额外的空间。

可以只做一个字符吗?

@Aacini 在下面的评论中正确回答了(第一个问题) ,但如果他没有创建答案,这里是:

>set /P "=a" < NUL | od -A x -t x1z -v -
000000 61                                               >a<
000001

是否有任何技巧可以使 UNIX echo更精确,例如带有-n (无换行符)和-e使用反斜杠解释),以便我可以与此类似的输出:

>unix_echo -n -e "a\n" |  od -A x -t x1z -v -
000000 61 0a                                            >a.<
000002

set /P命令用于提示用户并接受输入。 例如:

set /P "name=Enter your name: "

此命令显示提示消息并将光标置于其后。 我们可以很好地利用这个行为来显示一个以CR+LF结尾的“提示”,然后完成将Stdin重定向到NUL的虚拟输入。 在这种情况下,不需要变量名称:

set /P "=Text with no CR+LF at end" < NUL

这样,要仅输出一个字符,请使用以下命令:

set /P "=a" < NUL

请注意, set /P命令会省略提示消息中的任何前导空格。 这意味着不能使用此方法仅显示空格。

要在输出中使用换行符 (\\n)、回车符 (\\r) 或退格 (\\b) 字符,您可以创建辅助变量。
这个变量应该只用于延迟扩展(或者你应该知道你在做什么)。

setlocal EnableDelayedExpansion
(
set \n=^
%=DO NOT MODIFY THIS LINE=%
)
for /F "tokens=1,2 delims=# " %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "\b=%%a"
)
for /f %%a in ('copy /Z "%~dpf0" nul') do (
  set "\r=%%a"
)

echo Line1!\n!Line2

<nul set /p ".=Line1!\n!Line2 without"
echo  end

echo 12345!\b!*
echo 12345!\r!*

要在没有换行符的情况下回显单个空格(或多个空格), set/p 技巧不起作用,但您可以通过使用单个空格构建临时文件来创建另一种解决方法。

setlocal EnableDelayedExpansion

(set LF=^
%=EMPTY=%
)
call :createSpaceFile
type spaceFile.tmp
echo After the space
exit /b

:createSpaceFile
<nul set /p ".=X!LF! " > spaceFile1.tmp
findstr /V "X" spaceFile1.tmp > spaceFile.tmp
exit /b

echo写入给定参数加上0d0a (CRLF)。

要从echo获取一个字节(字符),您需要 2 个退格字符,后跟要回显的字符。

0x08(退格字符)可以从prompt命令中提取。
另一方面, set可以将一个字符(字节)写入文件:
(set /p = a)<nul>one.txt一个字符 'a' 回显到文件 'one.txt'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM