【问题标题】:Run a program with random waiting times运行具有随机等待时间的程序
【发布时间】:2018-08-17 07:20:34
【问题描述】:

我正在尝试创建一个批处理文件来随机运行一个程序,但它不起作用我怎样才能使批处理文件工作?

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

【问题讨论】:

  • 此脚本仅每 20 秒运行一次,程序应随时随机执行一次
  • echo set /a timeout=%RANDOM% * 21 / 32768 + 20 & timeout /t %timeout% & notepad.exestackoverflow.com/questions/41030190/command-to-run-a-bat-file/…
  • “它不起作用” 是一个可怕的问题示例。它做什么,或不做什么?
  • @CatCat,如果你想在一行中写完,你需要delayed expansion
  • 您的代码是否放置在带括号的块中,例如for loopdo ( ... ) 子句?

标签: windows batch-file command-line


【解决方案1】:

您对问题的描述不清楚。 它不工作” 可能意味着任何东西。 您发布的代码有效。并完全按照您的要求做:

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

然而这很危险,如果您打开notepad 太多次(尤其是在低内存设备上),电脑可能会变得无响应。因此,请进行进程计数,并且仅在未满足进程数时才启动新实例:

: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后面的数字可以增减。

【讨论】:

  • 我解决了这个问题,现在脚本真的很随机​​
  • 每当我听说随机性没有按预期工作时,我都会不禁想到这个呆伯特地带:i.pinimg.com/originals/cc/3d/66/…
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多