批处理文件'选择'语法

时间:2013-09-22 09:33:59

标签: batch-file choice

我最近刚刚编辑了一个脚本,我看到它使它变得更有活力和更小。 我似乎找到了一个我无法弄清楚的问题。 对于输入,它有一个只允许AZ + 0-9的选择脚本,所以我想知道,允许输入的密钥是什么,比如是否有“ENTER”或“SHIFT”或“SPACE”键的代码或“BACKSPACE”,因为我需要所有这些,所以我可以整合它们。

    @echo off
    color 05
    mode con cols=30 lines=8
    echo.
    echo Welcome.
    pause >nul
    cls
  :startover
    set variable=
    set counter=-1
  :password
**choice /c:abcdefghijklmnopqrstuvwxyz0123456789 /n /m "Type password please:%variable%"
    echo.**
    echo %ERRORLEVEL%

call :variable

if errorlevel 255 goto Error
if errorlevel 36 set letter=%letter%9&goto PWcheck
if errorlevel 35 set letter=%letter%8&goto PWcheck
if errorlevel 34 set letter=%letter%7&goto PWcheck
if errorlevel 33 set letter=%letter%6&goto PWcheck
if errorlevel 32 set letter=%letter%5&goto PWcheck
if errorlevel 31 set letter=%letter%4&goto PWcheck
if errorlevel 30 set letter=%letter%3&goto PWcheck
if errorlevel 29 set letter=%letter%2&goto PWcheck
if errorlevel 28 set letter=%letter%1&goto PWcheck
if errorlevel 27 set letter=%letter%0&goto PWcheck
if errorlevel 26 set letter=%letter%z&goto PWcheck
if errorlevel 25 set letter=%letter%y&goto PWcheck
if errorlevel 24 set letter=%letter%x&goto PWcheck
if errorlevel 23 set letter=%letter%w&goto PWcheck
if errorlevel 22 set letter=%letter%v&goto PWcheck
if errorlevel 21 set letter=%letter%u&goto PWcheck
if errorlevel 20 set letter=%letter%t&goto PWcheck
if errorlevel 19 set letter=%letter%s&goto PWcheck
if errorlevel 18 set letter=%letter%r&goto PWcheck
if errorlevel 17 set letter=%letter%q&goto PWcheck
if errorlevel 16 set letter=%letter%p&goto PWcheck
if errorlevel 15 set letter=%letter%o&goto PWcheck
if errorlevel 14 set letter=%letter%n&goto PWcheck
if errorlevel 13 set letter=%letter%m&goto PWcheck
if errorlevel 12 set letter=%letter%l&goto PWcheck
if errorlevel 11 set letter=%letter%k&goto PWcheck
if errorlevel 10 set letter=%letter%j&goto PWcheck
if errorlevel 9 set letter=%letter%i&goto PWcheck
if errorlevel 8 set letter=%letter%h&goto PWcheck
if errorlevel 7 set letter=%letter%g&goto PWcheck
if errorlevel 6 set letter=%letter%f&goto PWcheck
if errorlevel 5 set letter=%letter%e&goto PWcheck
if errorlevel 4 set letter=%letter%d&goto PWcheck
if errorlevel 3 set letter=%letter%c&goto PWcheck
if errorlevel 2 set letter=%letter%b&goto PWcheck
if errorlevel 1 set letter=%letter%a&goto PWcheck
goto Error
:pwcheck
echo.
echo Your letters are %letter%
if %counter%==10 goto finish
goto password
:variable
set /a counter=%counter%+1
if %counter%==0 set variable=
if %counter%==10 goto finish
set variable=%variable%*
goto :eof
cls
:finish
echo Your password is %letter%
pause>nul
cls
choice /t 10 /c yn /d y /m "Start over "
if errorlevel 2 cls&echo CLOSING&exit
if errorlevel 1 goto startover
:Error
  title Test v1.1 *** Error *** %time%
  echo Error: Critical Error.
  pause >nul
goto :eof
exit

如果您有任何想法或建议使其成功,以便允许任何长度,请告诉我们。这似乎是最好的主意。

1 个答案:

答案 0 :(得分:4)

选择非常有限,因此您需要另一种解决方案。

一种方法是使用自己的函数,使用xcopy作为键输入。

batch - color input by user

:GetKey
set "key="
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
  if not defined key set "key=%%L"
)
set "key=%key:~-1%"
exit /b

xcopy / L / W尝试将批处理文件复制到自身。 / W是重要选项,它需要在复制过程开始前按键,并显示键 副本本身始终失败,因为文件无法复制到自身 因此,错误流会被2>NUL重定向到NUL。

FOR / F通过击键捕获完整的一行。 并且set "key=%key:~-1%"只选择该行中的最后一个字符。

好处是xcopy接受并显示几乎所有键(F1 .. F12和其他一些键仍然失败),甚至可以通过这种方式检测Backspace和Enter。