Я пытаюсь сделать командный файл с выделенным выбором. Например, когда ваш компьютер выключен неправильно, он отображает черный экран, и вы можете использовать клавиши со стрелками для навигации по параметрам. Мне было интересно, могу ли я дублировать это с помощью командного сценария.Пакетный файл Стрелка Клавиша навигации
ответ
Я следил за ссылками, приведенными в предыдущем ответе, и не нашел полезной информации. Три ссылки ссылаются на одно и то же решение «CHOICE /n /s /c:qQ
» на основе старой команды MS-DOS choice.com
, но это шутка: предыдущая команда просто возвращает разные значения уровня ошибок для клавиш «q» и «Q». Вам нужна сторонняя программа, чтобы читать «расширенные ключи», такие как клавиши управления курсором, функциональные клавиши и т. Д.
Некоторое время назад я написал программу такого типа с именем GetKey.exe
; он возвращает код ключа всех клавиш на клавиатуре с помощью уровня ошибок: символы Ascii возвращаются как положительные значения, а расширенные - как отрицательные. Например, ключ UpArrow возвращает -72, а DownArrow возвращает -80. Файл Batch ниже создать GetKey.exe вспомогательную программу и показать краткое описание его использования:
@if (@CodeSection == @Batch) @then
@echo off
rem Create GetKey.exe auxiliary program and show its usage
rem http://www.dostips.com/forum/viewtopic.php?f=3&t=3428
rem Antonio Perez Ayala
echo Get a key from keyboard and return its value in ERRORLEVEL.
echo/
echo GetKey [/N]
echo/
echo Ascii characters are returned as positive values, extended keys as negative.
echo/
echo If /N switch is given, no wait for a key: immediately return zero if no key
echo was pressed.
echo/
if not exist GetKey.exe call :ExtractBinaryFile GetKey.exe
goto :EOF
rem Extract Binary File from hexadecimal digits placed in a "resource" in this .bat file
:ExtractBinaryFile filename.ext
setlocal EnableDelayedExpansion
set "start="
set "end="
for /F "tokens=1,3 delims=:=>" %%a in ('findstr /N /B "</*resource" "%~F0"') do (
if not defined start (
if "%%~b" equ "%~1" set start=%%a
) else if not defined end set end=%%a
)
(for /F "skip=%start% tokens=1* delims=:" %%a in ('findstr /N "^" "%~F0"') do (
if "%%a" == "%end%" goto decodeHexFile
echo %%b
)) > "%~1.hex"
:decodeHexFile
Cscript //nologo //E:JScript "%~F0" "%~1" < "%~1.hex"
del "%~1.hex"
exit /B
<resource id="GetKey.exe">
4D5A900003[3]04[3]FFFF[2]B8[7]40[35]B0[3]0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F74
2062652072756E20696E20444F53206D6F64652E0D0D0A24[7]55B5B8FD11D4D6AE11D4D6AE11D4D6AE9FCBC5AE18D4D6AEED
F4C4AE13D4D6AE5269636811D4D6AE[8]5045[2]4C0102005A66D14F[8]E0000F010B01050C0002[3]02[7]10[3]10[3]20[4]40[2]10
[3]02[2]04[7]04[8]30[3]02[6]03[5]10[2]10[4]10[2]10[6]10[11]1820[2]3C[84]20[2]18[27]2E74657874[3]96[4]10[3]02[3]02[14]20[2]602E
7264617461[2]BA[4]20[3]02[3]04[14]40[2]40[8]E806[3]50E873[3]E840[3]E85F[3]803E00741866813E2F57740766813E2F77740A
FF150C20400085C07419FF151020400085C074073DE0[3]7508FF1510204000F7D8C3CCCCCCCCE82F[3]8BF08A06463C227509
8A06463C2275F9EB0C8A06463C20740484C075F54EC38A06463C2074F94EC3CCFF2504204000FF2500204000FF2510204000FF
250C2040[363]7A20[2]6C20[6]A420[2]9A20[6]5420[10]8C20[3]20[2]6020[10]AE20[2]0C20[22]7A20[2]6C20[6]A420[2]9A20[6]9B004578
697450726F6365737300E600476574436F6D6D616E644C696E6541006B65726E656C33322E646C6C[2]CE005F6765746368[2]11
015F6B62686974[2]6D73766372742E646C6C[328]
</resource>
@end
// Convert Ascii hexadecimal digits from Stdin to a binary string
var count, output = "";
while (!WScript.Stdin.AtEndOfStream) {
var input = WScript.Stdin.ReadLine();
for (var index = 0; index < input.length;) {
if (input.charAt(index) == '[') {
for (count = ++index; input.charAt(index) != ']' ; index++) ;
count = parseInt(input.slice(count,index++));
for (var i = 1; i <= count; i++) output += String.fromCharCode(0);
} else {
output += String.fromCharCode(parseInt(input.substr(index,2),16));
index += 2;
}
}
}
// Write the binary string to the output file
var ado = WScript.CreateObject("ADODB.Stream");
ado.Type = 2; // adTypeText = 2
ado.CharSet = "iso-8859-1"; // right code page for output (no adjustments)
ado.Open();
ado.WriteText(output);
ado.SaveToFile(WScript.Arguments(0),2); // adSaveCreateOverWrite = 2
ado.Close();
Для дальнейшего описания по программе GetKey.exe, с примерами и полным перечнем ключевых кодов, см this post; найдите программу №3 - GetKey.exe.hex.
Если вы хотите отобразить меню с параметрами, вам нужно переместить курсор и показать выделенный текст. Вы можете сделать это с помощью CursorPos.exe
и ColorShow.exe
дополнительных программ, которые описаны в той же ссылке выше.
- 1. клавиша-стрелка через stdin
- 2. CSS3 навигации стрелка
- 3. JQuery Содержание Стрелка навигации
- 4. Jssor - стрелка клавиш навигации
- 5. Клавиша навигации с Javascript
- 6. ListBox + WrapPanel Клавиша навигации по стрелке
- 7. CSS активизируют панель навигации стрелка
- 8. Atom - полсловом навигации привязок клавиша
- 9. Как достичь стрелка клавиш навигации между дивы
- 10. стрелка указатель на навигации ссылки изменить onclick
- 11. рисунок навигации стрелка формы с помощью CSS
- 12. Пакетный файл в Zip-файл
- 13. пакетный файл, который создает новый пакетный файл
- 14. Пакетный файл не запускает другой пакетный файл
- 15. Клавиша навигации курсора в treeview asp.net
- 16. Клавиша TAB для навигации только в модальном
- 17. Клавиша Alt при навигации в консоли
- 18. Up клавиша навигации: NullPointerException Java Android
- 19. WPF datagrid стрелка (справа/слева) исключение для навигации ключа
- 20. стрелка клавишей навигации в таблице с помощью jquery
- 21. Как создать пакетный файл, который создает пакетный файл, который создает пакетный файл
- 22. Открыть файл с Пакетный файл
- 23. Пакетный файл, создающий файл журнала
- 24. Пакетный файл, перемещающийся ОДИН файл
- 25. Пакетный сценарий: меню навигации с выделенным выбором
- 26. Выполнить пакетный файл после того, как другой пакетный файл завершает
- 27. нужен пакетный файл
- 28. Интерактивный пакетный файл
- 29. Пакетный файл не работает?
- 30. FTP через пакетный файл
Небольшое примечание к вашему последнему абзацу: [Использование цветов в оболочке Windows] (http://stackoverflow.com/questions/4339649/how-to-have-multiple-colors-in-a-windows-batch-file) на самом деле возможно без сторонних инструментов (в некоторой степени). – zb226
@ zb226: Да, это _possible_, но определенно нецелесообразно нажимать клавишу и ждать 4 или 5 секунд, чтобы метод 'findstr' отменял (перерисовывает) текущий параметр и выбирал (выделял) новый ... – Aacini