在Windows批处理中,Linux shell命令echo -n抑制输出末尾的换行符是什么?
其思想是在循环中的同一行上写入。
在Windows批处理中,Linux shell命令echo -n抑制输出末尾的换行符是什么?
其思想是在循环中的同一行上写入。
当前回答
回显带有空格且没有换行符
如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
其他回答
使用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个很棒的脚本编写技巧。 下载页面还包含其他三个有用的工具包。
示例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
也许这就是你要找的,这是一个老派的剧本……: 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命令的输出”,而不是在“示例消息”之后实际添加一个可见字符。然而,使用常规百分号也可以做到这一点。
SET /P中被剥离空白的解决方案:
窍门是你可以在DOS的文本编辑器EDIT中调用的退格字符。要在EDIT中创建它,请按ctrl +ctrlH。 我想把它粘贴在这里,但是这个网页不能显示它。它在记事本上是可见的(它很奇怪,就像一个小的黑色矩形,中间有一个白圈)
你可以这样写:
<nul set /p=.9 Hello everyone
点可以是任何字符,它只是告诉SET /P文本从这里开始,在空格之前,而不是在“Hello”处。 “9”是一个退格字符的表示,我不能在这里显示。你必须用它来代替9,它就会删除",之后你会得到:
Hello Everyone
而不是:
Hello Everyone
我希望这对你们有帮助
DIY cw.exe(控制台编写)实用程序
如果你找不到现成的,你可以自己动手做。有了这个cw实用程序,你可以使用每一种字符。至少,我是这么想的。请对它进行压力测试,然后告诉我。
工具
你所需要的只是安装。net,这在当今非常普遍。
材料
输入/复制粘贴了一些字符。
步骤
用以下内容创建.bat文件。
/* >nul 2>&1
@echo off
setlocal
set exe=cw
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do set "csc=%%v"
"%csc%" -nologo -out:"%exe%.exe" "%~f0"
endlocal
exit /b %errorlevel%
*/
using System;
namespace cw {
class Program {
static void Main() {
var exe = Environment.GetCommandLineArgs()[0];
var rawCmd = Environment.CommandLine;
var line = rawCmd.Remove(rawCmd.IndexOf(exe),exe.Length).TrimStart('"');
line = line.Length < 2 ? "\r" : line.Substring(2) ;
Console.Write(line);
}
}
}
运行它。 现在您有了一个很棒的4KB实用程序,可以删除.bat。
或者,您可以在任何批处理中插入此代码作为子例程,将生成的.exe发送到%temp%,在批处理中使用它,并在完成时删除它。
如何使用
如果你想写一些没有换行的东西: 任何你想要的,即使是"",但记住转义^|,^^,^&等,除非双引号,如"| ^& "。
如果你想要一个回车(回到行首),运行just 连续波
所以试试从命令行:
for /l %a in (1,1,1000) do @(cw ^|&cw&cw /&cw&cw -&cw&cw \&cw)