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

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


当前回答

从这里

<nul set /p =Testing testing

同时也从空间的使用开始呼应

echo.Message goes here

其他回答

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

echo|set /p="Hello World"

下面就是:

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

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

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

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)

我发现这个简单的单行批处理文件“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是一个金矿。