我看过你数据库之前的问题,我没有尝试回答,但我尝试了。
我想写下面几行代码:
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!
重复成为 8188 个字符
然后变量、两个空格和一个 CR 和 LF 被回显到一个文件中 echo !X! > %temp%\cr.tmp
(注意 !X!
和 >
之间的两个空格和自然行结尾 echo 内部修改)
我们现在有 8192 个字符,但数据缓冲区只能容纳 8191 个字符,因此最后一个字符(换行符)将被删除!
在下一行echo\>> %temp%\cr.tmp
, 另一个 CR/LF
set 被附加到文件中(命令中的 \
只是不输出回车符和换行符,因为 echo
本身将输出 ECHO is ON/OFF
),这很重要,作为单个 CR
无法在行尾阅读(稍后会详细介绍)。
所以文件现在包含<8188 .'s><SPACE><SPACE><CR><CR><LF>
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do
读取第二个标记,分隔符是标准空格和制表符,因此第二个标记只有一个 CR
,如下CR/LF
作为标准行尾被删除。
最后 endlocal
用于返回到没有临时变量的环境 X
, c
和 a
existing(与括号中的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"
关于windows - 在同一行中呼应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4097041/