Windows 使用随机等待时间运行程序

Windows 使用随机等待时间运行程序,windows,batch-file,command-line,Windows,Batch File,Command Line,我试图创建一个批处理文件来随机运行一个程序,但它不起作用。如何使批处理文件工作 set /a timeout=%RANDOM% * 21 / 32768 + 20 timeout %timeout% notepad.exe 你对问题的描述不清楚。“它不起作用”可能意味着什么。 您发布的代码有效。并且完全按照您的要求执行: set /a timeout=%RANDOM% * 21 / 32768 + 20 timeout %timeout% notepad.exe 但是,根据您的评论,“此脚本

我试图创建一个批处理文件来随机运行一个程序,但它不起作用。如何使批处理文件工作

set /a timeout=%RANDOM% * 21 / 32768 + 20
timeout %timeout%
notepad.exe

你对问题的描述不清楚。“它不起作用”可能意味着什么。 您发布的代码有效。并且完全按照您的要求执行:

set /a timeout=%RANDOM% * 21 / 32768 + 20
timeout %timeout%
notepad.exe

但是,根据您的评论,“此脚本仅每20秒运行一次,程序应在任意一秒随机执行此操作”我假设您希望循环代码,如下所示:

:loop
set /a timeout=%RANDOM% * 21 / 32768 + 20
timeout %timeout%
notepad.exe
goto :loop
但是,这是危险的,如果您打开
记事本
太多次(尤其是在内存不足的设备上),电脑可能会变得无响应。因此,请进行进程计数,只有在不满足进程数的情况下才启动新实例:

:loop
set /a timeout=%RANDOM% * 21 / 32768 + 20 & timeout %timeout%
for /f "tokens=1,*" %%i in ('tasklist ^| find /I /C "notepad.exe"') do set var=%%i
if %var% LSS 10 start notepad.exe
goto :loop

此示例将无休止地循环,但仅当运行10个或更少的实例时,才会启动
notepad.exe
。这意味着最多允许10个记事本会话。LSS之后的数目可以增加/减少。

此脚本仅每20秒运行一次。程序应在任何时间随机执行
echo set/a timeout=%RANDOM%*21/32768+20&timeout/t%timeout%¬epad.exe
查看“它不工作”是一个可怕的问题示例。它做什么,或不做什么?@CatCat,如果您想在一行中写入所有内容,您需要它!您的代码是否放置在一个偏执的块中,如
do(…)
例如,a的子句?我解决了这个问题,现在脚本工作起来非常随机每当我听到随机性没有按预期工作时,我都会忍不住想到这个Dilbert片段: