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