Возможности пакетного файла могут быть расширены с помощью вспомогательных программ, некоторые из которых могут быть очень простыми, если они написаны на языке ассемблера:
@ECHO OFF
(
ECHO A100
ECHO MOV AH,B
ECHO INT 21
ECHO MOV AH,4C
ECHO INT 21
ECHO/
ECHO RCX
ECHO 8
ECHO W
ECHO Q
) | DEBUG CHKKEY.COM
Предыдущий пакетный файл создает CHKKEY длиной 8 байтов.COM вспомогательная программа, которая проверяет, была ли нажата клавиша, и возвращает значение ERRORLEVEL, равное 255, если это так, или ноль, если нет.Например:
:waitforkey
echo Waiting for a key to be pressed...
chkkey
if not errorlevel 1 goto waitforkey
echo A key was pressed!
Если у вас нет программы DEBUG.COM, вы можете получить ее в Интернете.Таким образом, для ожидания ключа в течение 5 секунд:
for /F "tokens=3 delims=:." %%a in ("%time%") do set /A second=%%c+5
if %second% geq 60 set /A second-=60
:waitforkey
for /F "tokens=3 delims=:." %%a in ("%time%") do if %%c == %second% goto timeexceeded
chkkey
if not errorlevel 1 goto waitforkey
set /P command=
Если вы измените значение B на 1 в инструкции MOV AH, B, ключ будет считан, и его код ASCII будет возвращен в ERRORLEVEL;эта функция позволяет прочитать одно нажатие клавиши и обработать его немедленно.Если значение равно 8, прочитанная клавиша не отображается на экране;это позволяет обрабатывать любую клавишу клавиатуры, даже функциональные и специальные клавиши, которые возвращают два значения: первое - ноль (обозначающее специальную клавишу), а второе - нажатую клавишу.Например, клавиша F1 возвращает 0 и 59.