bat脚本通用按键交互控制函数-onkeydown函数
程序员文章站
2022-07-07 23:17:56
...
::#################################################################################################
::1.1.1 通用按键交互控制函数
::call :onkeydown var_CMD_KEYS_CHR val_tmp_label_chr var_CMD_KEYS_NUM val_tmp_label_num var_tmp_key_value var_CMD_KEYS_USR
::#################################################################################################
goto :eof
:_job_gui_onkeyDown_fun
setlocal enabledelayedexpansion
::字母键集合变量
set _job_tmp_var=%%%1%%
::字母键变集合量值
call set _CMD_KEYS_CHR=%_job_tmp_var%
::字母按键区前缀
set _tmp_label_chr=%2
::数字键集合变量
set _job_tmp_var=%%%3%%
::数字键集合变量值
call set _CMD_KEYS_NUM=%_job_tmp_var%
::数字按键区标签
set _tmp_label_num=%4
::按键变量名
set _tmp_key_value_var=%5
::按键变量值
set _tmp_key_value=
::字母键集合变量(用户自定义)
set _job_tmp_var=%%%6%%
if "%6"=="" (
set _CMD_KEYS_USR=_CMD_KEYS_CHR
) else (
call set _CMD_KEYS_USR=%_job_tmp_var%
)
::字母键数量
set _tmp_chrkey_num=0
call :_job_gui_Len_fun _CMD_KEYS_USR _tmp_chrkey_num
::提示用户选择
choice /c:%_CMD_KEYS_USR%%_CMD_KEYS_NUM% /m:"-> 按键选择:"
::获取按键序号
set /a _tmp_cmdkey_val=%errorlevel%
::数字键处理
set /a _tmp_numkey_val=0
::构造数字跳转标签
if %_tmp_cmdkey_val% GTR %_tmp_chrkey_num% (
set /a _tmp_key_value=%_tmp_cmdkey_val%-%_tmp_chrkey_num%
set tolabel=%_tmp_label_num%
goto _job_gui_onkeyDown_end
)
::构造字母跳转标签
set /a _tmp_chrkey_val=%_tmp_cmdkey_val%-1
::根据按键序号取出按键字母
set _tmp_key_value=%%_CMD_KEYS_CHR:~%_tmp_chrkey_val%,1%%
call set _tmp_key_value=%_tmp_key_value%
::跳到对应按键处理标签
set tolabel=%_tmp_label_chr%_%_tmp_key_value%
goto _job_gui_onkeyDown_end
:_job_gui_onkeyDown_end
endlocal&set tolabel=%tolabel%&set %_tmp_key_value_var%=%_tmp_key_value%
goto :eof
::#################################################################################################
::1.1.2 求字符串的长度
::call :_job_gui_Len_fun _job_var_str _job_var_Len
::#################################################################################################
goto :eof
:_job_gui_Len_fun
Setlocal EnableDelayedExpansion
::长度变量名
set _job_var_Len=%2
::长度变量值
set _job_val_Len=0
::字符串
if "%1"=="" goto _job_gui_Len_end
set _job_tmp_var=%%%1%%
call set _job_val_str=#%_job_tmp_var%
for %%i in (1024 512 256 128 64 32 16 8 4 2 1) do (
if not "!_job_val_str:~%%i,1!"=="" (
set /a "_job_val_Len+=%%i"
set "_job_val_str=!_job_val_str:~%%i!"
)
)
:_job_gui_Len_end
Endlocal&if "%_job_var_Len%" NEQ "" (set %_job_var_Len%=%_job_val_Len%) else echo %_job_val_Len%
goto :eof
上一篇: 程序八
下一篇: 我在黑马程序员培训的第二十一天