Пакетный файл: нажмите любую клавишу, кроме X, чтобы выйти - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу предоставить пользователю пакетного файла возможность «нажать X для продолжения или любую другую клавишу для выхода».Я хотел бы, чтобы "любой другой ключ" включал пробел или любые другие ключи, которые обычно приводят к завершению пакетного файла при использовании pause>nul

Я знаю, как структурировать код для выходаили продолжить, если у меня есть результат «пользователь нажал X» или «пользователь нажал что-то, кроме X».Я просто не могу понять, как получить этот результат.

Я не хочу использовать метод пользовательского ввода Set /P, потому что для этого нужно нажать буквенно-цифровую клавишу, а затем нажать клавишу ввода.

Я не могу найти способ заставить Choice /C метод принимать «любой ключ» и воздействовать только на один конкретный.

TL; DR у кого-нибудь есть способ разрешитьПользователь пакетного файла, чтобы нажать одну клавишу, а затем попросить файл определить, была ли эта клавиша X или не X?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вы можете использовать xcopy вместе с его опцией /W, чтобы нажать клавишу перед копированием и переключатель /L, чтобы фактически не копировать ничего, кроме списка файлов, которые будут скопированы:

@echo off
set "KEY=" & for /F "delims=" %%K in ('
    2^> nul xcopy /L /W /I "%~f0" "%TEMP%"
') do if not defined KEY set "KEY=%%K"
setlocal EnableDelayedExpansion
if /I "!KEY:~-1!"=="X" goto :MoreCode
endlocal & exit /B

:MoreCode
echo {X} has been pressed.
pause

Для проверки нажатой клавиши отложенное расширение включено, чтобы избежать синтаксических ошибок в случае нажатия ".

0 голосов
/ 23 февраля 2019

Вы можете использовать команду choice:

@echo off
choice /c abcdefghijklmnopqrstuvwxyz0123456789 /n /m "Press X to continue, or any other key to exit."
cls
if not "%errorlevel%" == "24" exit

И затем вы можете продолжить работу с вашей программой.

0 голосов
/ 04 февраля 2019

Я знаю, что вы сказали, что не хотите использовать Set /P, но я не уверен, была ли проблема с буквенно-цифровой клавишей или с дополнительной клавишей ввода, нажмите.

Следующее, хотя и не проверено , не требует дополнительного нажатия клавиши ввода:

@Echo Off
Set "#="
Set /P "=Press X to continue :"<Nul
For /F Skip^=1^ Delims^=^ EOL^= %%$ In ('Replace ? . /U /W') Do If Not Defined # Set "#=%%$"
Echo(
If /I Not "%#%"=="X" Exit /B
Rem Your code goes here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...