[英]Windows cmd echo / pipe is adding extra space at the end - how to trim it?
[英]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.