在Windows批处理中,Linux shell命令echo -n抑制输出末尾的换行符是什么?
其思想是在循环中的同一行上写入。
在Windows批处理中,Linux shell命令echo -n抑制输出末尾的换行符是什么?
其思想是在循环中的同一行上写入。
当前回答
使用:echo | set /p=或<NUL set /p=都可以抑制换行符。
然而,当编写更高级的脚本时,检查ERRORLEVEL变得很重要,因为设置set /p=而不指定变量名将把ERRORLEVEL设置为1,这可能是非常危险的。
一个更好的方法是使用一个虚拟变量名,就像这样: echo | set /p dummyName=Hello World
这将产生你想要的东西,没有任何偷偷摸摸的东西在后台,因为我必须找到艰难的方法,但这只适用于管道版本;<NUL set /p dummyName=Hello仍然会将ERRORLEVEL提升为1。
其他回答
Late answer here, but for anyone who needs to write special characters to a single line who find dbenham's answer to be about 80 lines too long and whose scripts may break (perhaps due to user-input) under the limitations of simply using set /p, it's probably easiest to just to pair your .bat or .cmd with a compiled C++ or C-language executable and then just cout or printf the characters. This will also allow you to easily write multiple times to one line if you're showing a sort of progress bar or something using characters, as OP apparently was.
我相信没有这样的选择。或者你可以试试这个
set text=Hello
set text=%text% world
echo %text%
我发现这个简单的单行批处理文件“EchoPart.bat”非常有用。
@echo | set /p=%*
然后,我可以在交互式CMD行中,或者作为快捷方式的一部分,写如下所示的内容。它带来了一些新的可能性。
echopart "Hello, " & echopart "and then " & echo Goodbye
如果你在批处理文件中使用它,文本可以从参数变量而不是不可变字符串中获得。例如:
@echopart Hello %* & @echo , how are you?
因此,在"SayHello.bat"中执行这一行允许:
甚至……
玩个游戏,玩得开心!
你可以从gnuwin32 (coreutils包)中使用“tr”删除换行符
@echo off
set L=First line
echo %L% | tr -d "\r\n"
echo Second line
pause
顺便说一下,如果您正在编写大量脚本,gnuwin32是一个金矿。
也许这就是你要找的,这是一个老派的剧本……: P
set nl=^& echo.
echo %nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%
echo only in prompt.
pause
或者您可能试图替换当前行,而不是写入新的行? 您可以通过删除“。”符号后的“%bs%”和在“示例消息”后的“%bs%”来进行实验。
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "bs=%%a"
<nul set /p=.%bs% Example message %bs%
pause
我发现这真的很有趣,因为它使用变量的目的不是它想要做的事情。如你所见,“%bs%”表示退格。第二个“%bs%”使用退格符在“示例消息”之后添加空格,分隔“Pause命令的输出”,而不是在“示例消息”之后实际添加一个可见字符。然而,使用常规百分号也可以做到这一点。