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

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


当前回答

jscript:

@if (@X)==(@Y) @end /*
    @cscript //E:JScript //nologo "%~nx0" %*
    @exit /b %errorlevel%
*/if(WScript.Arguments.Count()>0) WScript.StdOut.Write(WScript.Arguments.Item(0));

如果它叫write.bat,你可以这样测试它:

call write.bat string & echo _Another_String_

如果你想使用powershell,但有cmd定义的变量,你可以使用:

set str=_My_StrinG_
powershell "Write-Host -NoNewline ""%str%""""  & echo #Another#STRING#

其他回答

使用set和/p参数可以不带换行符进行回显:

C:\> echo Hello World
Hello World

C:\> echo|set /p="Hello World"
Hello World
C:\>

示例1:它工作并生成退出代码= 0。这很好。 注意“。”,直接在echo之后。

C:\Users\phife.狗\ gitrepos \ 1 # \ repo_abc \脚本 @echo。| set /p JUNK_VAR=这是一个像Linux echo一样显示的消息-n将显示它…&回显%ERRORLEVEL%

这是一个像Linux echo -n一样显示的消息…0

示例2:这可以工作,但产生退出代码= 1。这很糟糕。 请注意回声后面缺少“。”。这似乎就是不同之处。

C:\Users\phife.狗\ gitrepos \ 1 # \ repo_abc \脚本 @echo | set /p JUNK_VAR=这是一个像Linux echo -n会显示它的消息…&回显%ERRORLEVEL%

这是一个像Linux echo -n一样显示的消息…1

使用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个很棒的脚本编写技巧。 下载页面还包含其他三个有用的工具包。

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.

回显带有空格且没有换行符

如Pedro之前所述,没有新行和前面有空格的echo有效(假设“9”是一个真正的[BackSpace])。

<nul set /p=.9    Hello everyone

我在Windows 10的新主机上遇到了一些问题,但我还是通过以下方式解决了问题。 在CMD中输入:

echo .◘>bs.txt

我按[Alt] +[8]键实现了“▲” (实际符号可能因代码页而异)。

然后使用Notepad.exe将结果从“bs.txt”复制到需要的地方就很容易了。

@echo off
<nul set /p "_s=.◘    Hello everyone"
echo: here