n61*_*007 4 windows cmd batch-file carriage-return non-printing-characters
动机
我有一个第三方,不知何故长.bat文件为某些特定功能编写,并将需要相当大的努力重写(这个努力也受到我的问题的阻碍).在for循环中,调试它的最基本方法似乎是将一些信息回显到屏幕上.我曾经\r在其他语言中使用(0x0D)字符执行此操作,在某些终端/控制台上重写相同的行(以避免过度浮动,因为在我的情况下,最后一行将包含错误).我已经将值保存到变量中.但是,由于迭代可能需要很长时间,我仍然乐意将一些输出写入不会过冲的屏幕.
我试过的
cmd用echo.-但我只需要回车echo \r,echo ^r,echo \x0d,echo ^x0d,echo #0d,echo ^#0d,echo #x0d,echo ^x0d题
是否有可能以某种方式回显windows/dos/nt/cmd批处理文件中的回车符(或其他不可打印的)字符?
PS.我使用的是XP或7 cmd处理器
你需要两个hacks - 一个用于定义回车符,另一个用于回显一行文本而不发出换行符.
1)定义回车.
:: Define CR to contain a carriage return (0x0D)
for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"
Run Code Online (Sandbox Code Playgroud)
一旦定义,该值只能通过延迟扩展来访问 - 例如!CR!,不是%CR%.
2)在不发出换行符的情况下将文本打印到屏幕上
<nul set /p "=Your message here"
Run Code Online (Sandbox Code Playgroud)
如果字符串以a开头,则会失败=.
此外,根据Windows版本,可能会剥离引号和/或空格
把它们放在一起
@echo off
setlocal enableDelayedExpansion
:: Define CR to contain a carriage return (0x0D)
for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"
<nul set/p"=Part 1 - press a key!CR!"
pause >nul
<nul set/p"=Part 2 - press a key!CR!"
pause >nul
<nul set/p"=Part 3 - Finished !CR!"
Run Code Online (Sandbox Code Playgroud)
请注意,我将!CR!每条消息的末尾放在下一步的准备中.你不能把它!CR!放在开头,因为前面的空格会被剥离.
| 归档时间: |
|
| 查看次数: |
3562 次 |
| 最近记录: |