【发布时间】:2016-11-09 06:57:38
【问题描述】:
我正在尝试 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> 和 <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 语句的输入。我很困惑从这里去哪里......
编辑 - 最后一个要求:我不希望查询响应出现在屏幕上,因为这会破坏屏幕并更改光标位置。我怀疑这可能是最难破解的坚果,用纯批次可能是不可能的。
【问题讨论】:
-
您是否测试了
xcopy方法来读取输出?当SET/p工作时,我怀疑xcopy也应该工作,你可以停在他R
标签: batch-file windows-console ansi-escape