在Windows批处理中,Linux shell命令echo -n抑制输出末尾的换行符是什么?

其思想是在循环中的同一行上写入。


当前回答

作为@xmechanix回答的补充,通过将内容写入一个文件,我注意到:

echo | set /p dummyName=Hello World > somefile.txt

这将在打印的字符串的末尾添加一个额外的空格,这可能是不方便的,特别是因为我们试图避免在字符串的末尾添加一个新行(另一个空白字符)。

幸运的是,引用要打印的字符串,即使用:

echo | set /p dummyName="Hello World" > somefile.txt

将打印结尾不带换行符或空格字符的字符串。

其他回答

我根据@arnep的想法做了一个函数:

echo|set /p="Hello World"

下面就是:

:SL (sameline)
echo|set /p=%1
exit /b

使用call:SL "Hello There" 我知道这没什么特别的,但我花了很长时间才想出来,所以我想我应该把它贴在这里。

使用Bill Stewart的“Shell脚本工具包”中的EchoX.EXE 如何在Windows Cmd脚本中抑制换行:

@Echo Off
Rem Print three Echos in one line of output
EchoX -n "Part 1 - "
EchoX -n "Part 2 - "
EchoX    "Part 3"
Rem

给:

Part 1 - Part 2 - Part 3
{empty line}
d:\Prompt>

这种用法的帮助是:

Usage: echox [-n] message
  -n       Do not skip to the next line.
  message  The text to be displayed.

该实用程序小于48K,应该位于Path中。它可以做的更多事情:-打印文本而不移动到下一行-打印文本在一定宽度内向左、中间或右边对齐-打印文本与制表符,换行和返回-打印文本在前景和背景颜色

该工具包还包括12个很棒的脚本编写技巧。 下载页面还包含其他三个有用的工具包。

你可以从gnuwin32 (coreutils包)中使用“tr”删除换行符

@echo off
set L=First line
echo %L% | tr -d "\r\n"
echo Second line
pause

顺便说一下,如果您正在编写大量脚本,gnuwin32是一个金矿。

SET /P中被剥离空白的解决方案:

窍门是你可以在DOS的文本编辑器EDIT中调用的退格字符。要在EDIT中创建它,请按ctrl +ctrlH。 我想把它粘贴在这里,但是这个网页不能显示它。它在记事本上是可见的(它很奇怪,就像一个小的黑色矩形,中间有一个白圈)

你可以这样写:

<nul set /p=.9    Hello everyone

点可以是任何字符,它只是告诉SET /P文本从这里开始,在空格之前,而不是在“Hello”处。 “9”是一个退格字符的表示,我不能在这里显示。你必须用它来代替9,它就会删除",之后你会得到:

    Hello Everyone

而不是:

Hello Everyone

我希望这对你们有帮助

也许这就是你要找的,这是一个老派的剧本……: 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命令的输出”,而不是在“示例消息”之后实际添加一个可见字符。然而,使用常规百分号也可以做到这一点。