如何让Windows CMD ECHO完全回应一个单一的字符?

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

以下使用的快速注释来自Git(或Gow)安装

例如,这个回声是'a'和'windows'换行符( \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 

所以我希望这只是回应'一个':

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

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

是否可以只做一个字符?

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

 >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