是否可以在批处理/ cmd中回显一些不可打印的字符?

n61*_*007 4 windows cmd batch-file carriage-return non-printing-characters

动机

我有一个第三方,不知何故长.bat文件为某些特定功能编写,并将需要相当大的努力重写(这个努力也受到我的问题的阻碍).在for循环中,调试它的最基本方法似乎是将一些信息回显到屏幕上.我曾经\r在其他语言中使用(0x0D)字符执行此操作,在某些终端/控制台上重写相同的行(以避免过度浮动,因为在我的情况下,最后一行将包含错误).我已经将值保存到变量中.但是,由于迭代可能需要很长时间,我仍然乐意将一些输出写入不会过冲的屏幕.

我试过的

  • 我知道我可以在回显一个单一换行符cmdecho.-但我只需要回车
  • 我尝试过这些,但他们的工作我以前不:echo \r,echo ^r,echo \x0d,echo ^x0d,echo #0d,echo ^#0d,echo #x0d,echo ^x0d
  • 我试图在没有太多帮助的情况下为类似的东西抢劫网

是否有可能以某种方式回显windows/dos/nt/cmd批处理文件中的回车符(或其他不可打印的)字符?

PS.我使用的是XP或7 cmd处理器

dbe*_*ham 8

你需要两个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!放在开头,因为前面的空格会被剥离.