如何在不使用选择和设置 /p 的情况下直接获取 y/n 按键
How to get the y/n key press directly without using choice and set /p
我试图在不使用 choice
和 set /p
的情况下获得 y/n 按键。我这样使用 del
:
@echo off
copy /y nul $~temp.txt
del /p $~temp.txt >nul
if exist $~temp.txt (
echo/
echo You pressed y.
) else (
echo/
echo You pressed n.
)
pause >nul
不直接按键。之后我们必须按回车键。任何不按回车键的方法都值得赞赏。
经过一些研究,我发现使用 sc
:
@echo off
sc /? >temp.txt
for %%a in (temp.txt) do (
if %%~za equ 4822 (
echo You pressed y.
) else (
echo You pressed n.
)
)
pause >nul
这对我有用,因为 sc
帮助屏幕中有一个直接的 y/n 按键提示。
您可以(误)使用xcopy
,它在指定/W
选项时提示是否继续复制; /L
开关可防止任何内容被实际复制:
@echo off
rem // Capture first line of output of `xcopy /W`, which contains the pressed key:
for /F "delims=" %%K in ('
xcopy /W /L "%~f0" "%TEMP%"
') do set "KEY=%%K" & goto :NEXT
:NEXT
rem // Extract last character from captured line, which is the pressed key:
set "KEY=%KEY:~-1%"
rem // Return pressed key:
echo You pressed "%KEY%".
rem // Check pressed key (example):
if /I not "%KEY%"=="Y" if /I not "%KEY%"=="N" >&2 echo You pressed an unexpected key!
或者,您可以(误)使用 replace
,当指定 /W
选项时会提示是否继续替换; /U
开关可防止在源和目标相同时实际复制任何内容:
@echo off
rem // Capture second line of output of `replace /W`, which is the pressed key:
for /F "skip=1 delims=" %%K in ('
replace /W /U "%~f0" "."
') do set "KEY=%%K" & goto :NEXT
:NEXT
rem // Return pressed key:
echo You pressed "%KEY%".
rem // Check pressed key (example):
if /I not "%KEY%"=="Y" if /I not "%KEY%"=="N" >&2 echo You pressed an unexpected key!
我不得不承认,我不记得 replace
在 Windows XP 上是否可用。
我试图在不使用 choice
和 set /p
的情况下获得 y/n 按键。我这样使用 del
:
@echo off
copy /y nul $~temp.txt
del /p $~temp.txt >nul
if exist $~temp.txt (
echo/
echo You pressed y.
) else (
echo/
echo You pressed n.
)
pause >nul
不直接按键。之后我们必须按回车键。任何不按回车键的方法都值得赞赏。
经过一些研究,我发现使用 sc
:
@echo off
sc /? >temp.txt
for %%a in (temp.txt) do (
if %%~za equ 4822 (
echo You pressed y.
) else (
echo You pressed n.
)
)
pause >nul
这对我有用,因为 sc
帮助屏幕中有一个直接的 y/n 按键提示。
您可以(误)使用xcopy
,它在指定/W
选项时提示是否继续复制; /L
开关可防止任何内容被实际复制:
@echo off
rem // Capture first line of output of `xcopy /W`, which contains the pressed key:
for /F "delims=" %%K in ('
xcopy /W /L "%~f0" "%TEMP%"
') do set "KEY=%%K" & goto :NEXT
:NEXT
rem // Extract last character from captured line, which is the pressed key:
set "KEY=%KEY:~-1%"
rem // Return pressed key:
echo You pressed "%KEY%".
rem // Check pressed key (example):
if /I not "%KEY%"=="Y" if /I not "%KEY%"=="N" >&2 echo You pressed an unexpected key!
或者,您可以(误)使用 replace
,当指定 /W
选项时会提示是否继续替换; /U
开关可防止在源和目标相同时实际复制任何内容:
@echo off
rem // Capture second line of output of `replace /W`, which is the pressed key:
for /F "skip=1 delims=" %%K in ('
replace /W /U "%~f0" "."
') do set "KEY=%%K" & goto :NEXT
:NEXT
rem // Return pressed key:
echo You pressed "%KEY%".
rem // Check pressed key (example):
if /I not "%KEY%"=="Y" if /I not "%KEY%"=="N" >&2 echo You pressed an unexpected key!
我不得不承认,我不记得 replace
在 Windows XP 上是否可用。