我想运行一个循环并拥有它,以便如果按下某个键,循环结束,类似下面的内容虽然不起作用。 此外,循环必须继续运行,而不是在等待用户输入时停止。
@echo off
:start
echo 1
IF "a"=="" GOTO end
goto :start
:end
pause
答案 0 :(得分:1)
只要特定密钥为Ctrl+C
,
就会在所有批处理脚本中自动生效。
否则,您需要检查循环的每次迭代(就像您一样),以及另一个监视键盘的过程。
:: Allocate a probably-unique filename
set SENTINELFILE=%temp%\sentinel-%random%-%time:~6,5%.lck
:: Should probably do something less destructive if the file already exists
:: like loop and find another name. But this is a prototype.
copy /y NUL %SENTINELFILE%
:: Opens a new cmd window which prompts the user to press X
:: then deletes the sentinel and exits
:: Could also run another batch file or exe that does something we can detect
start "End Task" %comspec% /c choice /c x /M "Press X to end task" ^& del %SENTINELFILE%
:topofloop
:: TODO: Process some part of your work to be done
:: Loop as long as the sentinel file exists
if exist %SENTINELFILE% goto :topofloop
答案 1 :(得分:0)
你所指的是多线程(一个线程接受输入,一个线程运行循环)。有一些棘手的方法可以做到这一点。但是,为了节省您的时间和精力,您可以做的一个便宜的技巧是每次迭代保持循环一秒钟并使用choice
命令等待输入:
@echo off
:start
echo 1
choice /c "qa" /d q /t 1 /n /m "Press a to Stop Loop: "
if %errorlevel%==2 goto end
cls
goto :start
:end
pause
每秒停止一次以检查输入为a