首页 > 解决方案 > 在 FOR 循环中计算

问题描述

我正在尝试为我们网络中的所有机器设置计划任务。所以它们的开始时间并不相同,我编辑 XML 文件以使用随机时间。更改 XML 工作正常,但只要我在它周围放置一个 For 循环以使用 servers.txt,我就会收到一条错误消息:“此时 +10 是意外的。”

@echo off

for /F "tokens=*" %%i in (servers.txt) do (

set file=original.xml
set insertline=9
SET /a uur=(%RANDOM%*6/32768)+10
SET /a minuut=(%RANDOM%*50/32768)+10
set output=output.XLM

(for /f "tokens=1* delims=[]" %%a in ('find /n /v "##" ^< "%file%"') do (
    if "%%~a"=="%insertline%" (
    echo ^<StartBoundary^>2018-12-17T%uur%:%minuut%:43.9766025^<^/StartBoundary^>
    REM ECHO.%%b
    ) ELSE (
    echo.%%b
    )
    )) > %output%

SchTasks /Create /S \\%%i /RU username /RP password /XML output.XLM /TN task_name

)

标签: batch-filefor-loopvariableswindows-task-scheduler

解决方案


命令中的右括号过早set关闭循环。for

这里有两种可能的方法来克服它:

SET /a "uur=(%RANDOM%*6/32768)+10"
SET /a minuut=(%RANDOM%*50/32768^)+10

第一个)通过将整个分配括在引号中来保护 ,第二个将)( 用插入符号^) 转义。(您应该在整个脚本中始终使用其中一种可能性 - 我推荐第一种(带引号))

另一个失败:%RANDOM%每次在命令块中都会给你相同的值(使用延迟扩展来克服它。

稍后在脚本中,您会遇到与变量相同的file问题insertline。所以也从%file%%insertline%!file!!insertline!


推荐阅读