Я играю с новой (ограниченной) поддержкой escape-последовательностей VT-100 в консоли Windows 10. Поддерживаемые последовательности задокументированы по адресу 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
- person jeb   schedule 07.07.2016