我正在寻找一种在用户按下按钮时终止循环的方法。我知道如果你有一个循环,你可以按下控制c,但这不是我希望用户必须做的。我认为这不可能在批处理文件中,但我正在寻找一些证明我错的人!
我有另一个想法。那么使用自动脚本呢?在批处理文件的开头,您启动自动脚本。该脚本使用热键功能,当按下热键时,程序关闭。回到批处理文件中,您经常检查以查看自动脚本是否正在运行。如果不是,那么你知道热键被按下了。 我已对其进行了测试,但它确实有效,但我不喜欢每次检查tasklist.exe for wkey.exe时创建的延迟。如果我能找到一种更有效的方法来做到这一点,那就太棒了!
批处理文件:
@echo off
start wkey.exe
echo press the w key to stop.
timeout 3
:loop
tasklist /FI "IMAGENAME eq wkey.exe" 2>NUL | find /I /N "wkey.exe">NUL
if %ERRORLEVEL%==1 goto endloop
echo doing stuff . . .
goto loop
:endloop
echo you pressed the w key.
pause
exit
wkey.exe(使用自动语言编程)
#NoTrayIcon
#include <Constants.au3>
HotKeySet("w", "_input")
While 1
Sleep(10)
WEnd
Func _input()
Exit
EndFunc
答案 0 :(得分:3)
运行此按钮,当您按下控件(CTRL)键时,循环将停止执行 - 它仅适用于32 bit machines
并且certutil
不是XP原生的,因此需要Vista和更高版本
@echo off
>tmp.tmp echo -----BEGIN CERTIFICATE-----
>>tmp.tmp echo uEAAjtigFwC0TM0h
>>tmp.tmp echo -----END CERTIFICATE-----
certutil -decode -f tmp.tmp kbflag.com >nul
for /L %%a in (1,1,10000) do (
echo Press the CTRL key to exit - %%a
kbflag.com
if errorlevel 4 if not errorlevel 5 goto :skip
)
:skip
del kbflag.com
del tmp.tmp
echo Finished.
pause
它使用杂志.com
文件实用程序(.com文件仅在32位计算机上工作),名为KBFLAG.COM
,用于监视键盘并设置可以分支的错误级别。
这是一个12字节的文件,按此顺序B8 40 00 8E D8 A0 17 00 B4 4C CD 21
,批处理文件创建并删除它(它被编码到证书数据中)。
您可以找到不属于.com文件的64 bit system
的类似工具。
这是文档文件:
KBFLAG -- by Nico Mark -- from PC Magazine, December 23, 1986
KBFLAG can be used to cause branching in batch files, so that execution of
different parts of the file can be dependent on the state of toggle and shift
keys. You can, for example, abort execution of AUTOEXEC.BAT if the CapsLock
key has been toggled while CONFIG.SYS in running.
KBFLAG tests for a keystroke in the buffer, and sets errorlevel to the value of
the key's KBFLAG in the ROM BIOS. Thus, if the Ins key has been toggled, it
will return an errorlevel of 128. Other values are:
1 = Right Shift
2 = Left Shift
4 = Ctrl key
8 = Alt key
16 = ScrollLock
32 = NumLock
64 = CapsLock
128 = Ins
(You can use sums of these values to correspond to combinations of keys, so
96 = CapsLock and NumLock together.)
If you put these lines at the start of autoexec.bat--
KBFLAG
IF ERRORLEVEL 64 GOTO :END
--and put the label :END at the end of the file, autoexec.bat will then check
to see if CapsLock has been pressed, and will jump the end of the batch if it
has. To prevent autoexec.bat from executing on bootup, simply hit CapsLock
while config.sys is running.
You can use variations of this technique to cause different sets of programs
to run during autoexec.bat (or any batch file). For example, Caps Lock could
cause only a few programs to run; Alt + CapsLock could cause others; etc.