回声在同一行
我看了一下之前关于你的db的问题,我没有尝试一个答案,但我试了一下。回声在同一行
我想编写以下行代码:
echo Executing backup....
backup procedure
echo Ok
但输出应该是:
Executing backup... Ok
这是可能的?
我想你使用的是DOS/NT-批次。
这是可能与该组/ p命令,因为集/ P不打印一个CRLF
set /p "=Executing backup...." <nul
echo OK
此外有可能以擦除带有CR字符的行。 重要的是要知道set/p前面的空白字符被忽略(在Vista中,而不是在XP中),所以!cr!必须晚些时候或结束。 CR只能用delayedExpansion显示,因为%cr%起作用,但在扩展百分比阶段(或直接在此阶段之后)删除CR字符,但不在延迟扩展阶段。
其中仅使用一个线用于显示
@echo off
setlocal EnableDelayedExpansion EnableExtensions
call :CreateCR
for /l %%n in (1,1,10000) do (
set /P "=Count %%n!CR!" <nul
)
echo(
goto :eof
:CreateCR
rem setlocal EnableDelayedExpansion EnableExtensions
set "X=."
for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
echo !X! > %temp%\cr.tmp
echo\>> %temp%\cr.tmp
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do (
endlocal
set cr=%%a
goto :eof
)
goto :eof
EDIT的计数器的实施例:说明,如何可变cr
被创建(完成一招)
可变X
设定为后单点(字符本身不重要),重复成为8188个字符通过for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
然后va可变结构,两个空间并兼具CR和LF的呼应与echo !X! > %temp%\cr.tmp
文件(注意!X!
和>
与自然行结尾呼应赔偿内部之间的两个空格)
我们现在有8192个字符,但数据缓冲区只能容纳8191个字符,所以最后一个字符(换行符)将被删除!
下一行echo\>> %temp%\cr.tmp
,另一CR/LF
组附加到文件(在命令中\
仅仅是输出没有什么吧回车和换行,因为echo
由它的自我会输出ECHO is ON/OFF
),这一点很重要,作为一个单一的CR
不能在行的末尾读取(更多后面的内容)。
所以文件现在包含<8188 .'s><SPACE><SPACE><CR><CR><LF>
的for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
读取第二道理,delimters是标准的空间和标签,所以第二个令牌是只有一个CR
,如下面的CR/LF
作为标准行结束删除。
最后endlocal
用于返回到环境,而临时变量X
,c
和a
现有的(如括号中是endlocal
,它允许cr
的endlocal
前的设置,其实需要在括号结束影响(也可以写成for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do endlocal&set cr=%%a&goto :eof
)
此外
这是创建一个CR字符我的第一种方式,但它需要一定的时间和临时文件。
后来我看到一个更简单的从copy /z
命令中检索CR的方法。
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
试试这个Posix的系统(Linux)的
echo -n "Executing backup.... "
echo -n "backup procedure "
echo "Ok"
这是更难在Windows上。您将需要使用像这样:
@echo off
echo|set /p ="Executing backup...."
echo|set /p =" backup procedure"
我使用Windows Server 2003 .... – aemme 2010-11-04 13:31:58
@Piotr Czapla - 我不相信/每个集合(Windows示例)是必需的,或者至少它似乎没有工作一样。但是,试图删除它们时,有人阻止了编辑,所以也许这是错误的http://stackoverflow.com/questions/13665411/what-does-a-forward-slash-before-a-pipe-in-cmd-做去除的最行结束期的一#comment18755645_13665411。你能告诉我们需要吗? – user66001 2012-12-02 02:25:24
管道创建新的cmd.exe实例被提及在其他相关的thead(请参阅我的回复) – 2016-06-23 01:35:43
这有点破解,但这是Windows的article describing how to do it。
从文章,最后的结果(编辑您的设置)是这样的:
SET /P var=Backing up
%Result%....<NUL
Backup_process %Result% >NUL 2>&1
IF ERRORLEVEL 1
ECHO FAIL
ELSE
ECHO OK
非常感谢,我只能接受1回答....我会看看它 – aemme 2010-11-04 15:40:47
我用VBScript做了类似的事情。
将这个代码EchoNoNewline.vbs:
If WScript.Arguments.Named.Exists("TEXT") Then
WScript.StdOut.Write WScript.Arguments.Named.Item("TEXT")
End If
从您的批处理文件,使用这样的脚本:
CSCRIPT EchoNoNewLine.vbs //NOLOGO /TEXT:"Executing backup...."
backup procedure
CSCRIPT EchoNoNewLine.vbs //NOLOGO /TEXT:"Ok"
在What does a forward slash before a pipe in cmd do to remove the line ending of an echo? 最好的建议是:
回显没有换行的文本是非常我因为管道会创建两个新的cmd.exe实例。 这是更简单,更快地使用
<nul set /p "=My Text"
从NUL重定向也将停止对用户输入的等待。
想知道为什么有人通过这个答案没有用 – 2014-08-19 15:07:16
因为你这是我认为的答案 – SomethingDark 2016-06-21 14:16:24
你是认真的吗?我在这里发送的答案来自另一个线程。这里接受的答案是一些非常长的文本 – 2016-06-22 16:11:18
你在哪个操作系统上? – 2010-11-04 13:21:37
是的,Windows Server 2003中,我忘了... – aemme 2010-11-04 13:31:10