我正在尝试 Windows 10 控制台中对 VT-100 转义序列的新(有限)支持。支持的序列记录在https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx.
我特别感兴趣的是以下报告当前光标位置的序列。
ESC[6n - responds with ESC[<n>;<m>R,
where <n> is the row number, and <m> the column number
响应作为键盘输入传递,并显示在屏幕上,但我不知道如何以编程方式利用这些信息。理想情况下我想得到<n>
and <m>
从批处理文件中将值转换为环境变量。
但是,如果任何人都可以演示如何使用任何语言捕获变量,那么我也许可以利用这些知识来开发有效的批处理文件策略。
我可以使用以下名为 ANSI.BAT 的简单脚本来接近
@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%C in (
'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x1B"'
) do set "esc=%%C"
set "csi=%esc%["
echo(Inquiry:%csi%6n
set /p "pos="
echo response=!pos:%esc%=ESC!
- 输出 -
C:\test>ansi
Inquiry:
^[[3;9R
response=ESC[3;9R
C:\test>
一旦我在变量中得到响应,我就可以使用 FOR /F 轻松解析出值。我遇到的问题是我必须手动按<Enter>
响应出现在屏幕上后按 键,以终止 SET /P 语句的输入。我很困惑从这里该去哪里......
EDIT- 最后一个要求:我不希望查询响应出现在屏幕上,因为这会破坏屏幕并更改光标位置。我怀疑这可能是最难破解的难题,也许对于纯批次来说是不可能的。