我看了一下以前的db的问题,我没有尝试一个答案,但是我尝试了。
我想写下面这行代码:
echo Executing backup.... backup procedure echo Ok
但输出应该是:
Executing backup... Ok
这可能吗?
我想你正在使用dos / nt-batch。
可以用set / p命令,因为set / 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
编辑:说明,如何创建变量cr
(完成一个技巧)
在将变量X
设置为单个点(该字符本身不重要)之后,通过for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
中for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
的方式重复变为8188个字符for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
然后,变量,两个空格以及CR和LF都被回显成一个带有echo !X! > %temp%\cr.tmp
的文件echo !X! > %temp%\cr.tmp
echo !X! > %temp%\cr.tmp
(注意!X!
和the >
之间的两个空格和自然行结束符在内部回显修改)
我们现在有8192个字符,但数据缓冲区只能容纳8191个字符,所以最后一个字符(换行符)将被删除!
在下一行echo\>> %temp%\cr.tmp
,另一个CR/LF
集被附加到文件中(命令中的\
仅仅是输出回车和换行符,将输出ECHO is ON/OFF
),这一点非常重要,因为在一行的末尾不能读取单个CR
(更多后面的内容)。
所以文件现在包含<8188 .'s><SPACE><SPACE><CR><CR><LF>
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
的for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
读取第二个标记, for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
符是标准空间和标签,因此第二个标记仅为单个CR
,如以下CR/LF
作为标准线结束被删除。
最后, endlocal
被用来返回一个没有临时变量X
, c
和a
现有的环境(就像在括号中的endlocal
,它允许在endlocal
实际在括号的末尾产生影响之前设置cr
(也可以是写成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"
检查这个职位: http : //www.pcreview.co.uk/forums/showpost.php?s= 1a20b16775d915998b30bd76a0ec5d35& p= 4432915& postcount=7 。
这是一个黑客,但这里有一篇文章描述如何做到这一点的Windows。
从文章中,最后的结果(为您的设置编辑)如下所示:
SET /P var=Backing up %Result%....<NUL Backup_process %Result% >NUL 2>&1 IF ERRORLEVEL 1 ECHO FAIL ELSE ECHO OK
我用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"
在cmd中的一个管道之前的一个正斜杠是什么来消除回声的结束行? 最好的建议是:
在没有换行的情况下回显文本是非常低效的,因为管道会创建两个新的cmd.exe实例。 使用起来更简单快捷
<nul set /p "=My Text"
来自NUL的重定向也将停止等待用户输入。