gpt4 book ai didi

batch-file - 如何通过批处理文件在随机时间安排任务?

转载 作者:行者123 更新时间:2023-12-04 14:58:47 27 4
gpt4 key购买 nike

我需要创建一个脚本,该脚本将通过 Windows 7 机器上的 .bat 文件运行。
批处理文件将创建一个计划任务,该任务在周日上午 11 点到晚上 9 点之间的随机时间运行。
我目前正在使用这个我知道有效但仅限于特定时间的命令:

schtasks /create /tn "task" /tr c:\task.vbs /sc WEEKLY /d SUN /st 21:00:00 /ru ""

我想随机化时间,以便我可以在所有 400 个系统上运行完全相同的批处理文件,并让每个系统在该范围内获得不同的时间,因此它们不会同时运行任务。我不在乎它们中的几个是否获得相同的时间,但我不希望所有 400 个都在相同的几分钟内运行。
一旦我有一个按预期工作的批处理文件,它将被推送到所有系统并运行一次以安排该任务。

基于在这里搜索其他答案,我尝试使用以下脚本,现在只是尝试生成一个随机小时,但我没有得到我需要的结果:

选项1)
set /a num=%random% * (21 - 11 + 1) / 32768 + 11

该命令将生成一个正确范围内的数字,但它并不是真正随机的,它似乎基于时钟或其他东西,因为如果我快速运行它几次,我会得到相同的数字,然后它会随着时间递增通过,这行不通。

选项 2)
@echo off & setlocal EnableDelayedExpansion

for /L %%a in (1 1 20) do (
call:rand 11 21
echo !RAND_NUM!
) >> random2.txt

goto:EOF

REM The script ends at the above goto:EOF. The following are functions.

REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF

该代码正确生成随机数,但我不知道如何将该数字插入到我想要的命令中。我曾尝试用 schtasks 命令替换“>> random2.txt”,但它不起作用,而且我没有获取并反馈到日志文件以查看原因,我试过这样的:
@echo off & setlocal EnableDelayedExpansion

for /L %%a in (1 1 1) do (
call:rand 11 21
echo !RAND_NUM!
)
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st %RANDOM%:00:00 /ru "" > task.txt 2>&1
goto:EOF

REM The script ends at the above goto:EOF. The following are functions.

REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF

因此,我尝试使用 %RANDOM% var 作为命令的小时组件。

完美的解决方案是为小时部分生成一个介于 11 和 21 之间的随机两位数字,然后为命令的分钟部分生成一个介于 00 和 59 之间的两位数字,根据命令格式的要求,它们之间有一个冒号
所以 schtasks 命令的时间部分看起来像这样:
%hour11-21%:%min00-59%:00

我希望我在这里提供了足够的细节,谁能告诉我我做错了什么?有没有更简单的方法来做到这一点?
先感谢您!

最佳答案

尝试这个:

@echo off
setlocal enabledelayedexpansion
call :rand 1 1 dummy
call :rand 11 21 ret
call :rand 0 59 ret2
if %ret2% LSS 10 set ret2=0%ret2%
echo schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st %ret%:%ret2%:00 /ru "" > task.txt 2>&1
exit /b

:rand
setlocal
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
endlocal & set %~3=%RAND_NUM%
exit /b

输出:
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 11:00:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 16:7:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 17:46:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 19:35:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 13:54:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 14:51:00 /ru ""

U:\Scripts\Batch>RandomNumBetween.cmd
schtasks /create /tn "task" /tr c:\task.vbs /d SUN /sd 10/28/2012 /st 21:48:00 /ru ""

关于batch-file - 如何通过批处理文件在随机时间安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com