欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

 

相关标签: onkeydown函数