- @echo off&setlocal enabledelayedexpansion
- :: 灵感来源于cn-dos趣味东的多行回退
- :: 趣味东发现用set /p输出一个tab+n个退格就将光标回退多行,但并不好控制
- :: 于是本人就想到是不是能将光标回退到原点(屏幕左上角)
- :: 结果发现用echo输出一个tab+n个退格就能将光标退回到原点过一格的位置,但有错误信息输出
- :: 于是,用2>nul屏蔽错误信息,并再加一个退格将光标退回原点
- :: 下面通过代码进行简单演示,至于原因本人暂未搞明白
- :: 因论坛处理不了tab,请将代码中的tab字符替换为实际的tab
- title 神奇的回退
- set "t=tab"
- for /l %%a in (1,1,1000) do set "k=!k!"
- for /l %%a in (1,1,10) do echo ○○○○○○○○○○
- ping /n 2 127.1>nul
- :: 这里将光标退回原点处,请仔细注意光标的位置
- echo %t%%k% 2>nul&set /p=<nul
- pause>nul
- :: 请注意6-10行第6-10个字符的输出是没有改变的
- for /l %%a in (1,1,5) do echo ●●●●●¤¤¤¤¤
- for /l %%a in (1,1,5) do echo ⊙⊙⊙⊙⊙
- pause>nul
复制代码 延伸:当我们实现了将光标退回原点后,那么就能随意控制光标退回到设定的位置了,再以代码示之:- @echo off&setlocal enabledelayedexpansion
- :: 请同样将tab字符换成tab
- title 光标回退7行
- set "t=tab"
- for /l %%a in (1,1,1000) do set "k=!k!"
- for /l %%a in (1,1,20) do echo %%a%t%bathome
- ping /n 2 127.1>nul
- set /a n=20-7
- echo %t%%k% 2>nul&set /p=<nul
- for /l %%a in (1,1,%n%) do echo.
- set /p=现在光标回退到这里了<nul
- pause>nul
复制代码
|