我正在尝试为我们网络中的所有计算机设置计划任务。因此,它们的开始时间并不相同,我将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
)
答案 0 :(得分:1)
您的set
命令中的右括号括住for
循环为时过早。
以下是两种可能的解决方法:
SET /a "uur=(%RANDOM%*6/32768)+10"
SET /a minuut=(%RANDOM%*50/32768^)+10
第一个通过将整个分配括在引号中来保护)
,第二个逃脱了)
(带有尖号^
)。 (您应该在整个脚本中始终使用其中一种可能性-我建议第一个(带引号))
另一个失败:%RANDOM%
每次在命令块中都会给您相同的值(使用delayed expansion可以解决这个问题。
稍后,在脚本中,file
和insertline
变量也有相同的问题。因此,也从%file%
和%insertline%
更改为!file!
和!insertline!
。
答案 1 :(得分:0)
我认为覆盖output.xml
的目的是根据具有不同(随机)StartBoundary的模板创建新任务。
但是所有常量(在代码块内部重新定义)都应从外部移到最前面。
由于for的内部仅具有if / else命令,因此不需要使用一组括号。
适当的缩进有助于保持代码概述。
:: Q:\Test\2018\12\17\SO_53814701.cmd
@echo off & Setlocal EnableDelayedExpansion
set file=original.xml
set insertline=9
set output=output.XLM
for /F "tokens=*" %%i in (servers.txt) do (
SET /a "uur=(!RANDOM!*6/32768)+10"
SET /a "minuut=(!RANDOM!*50/32768)+10"
( 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
)
答案 2 :(得分:0)
嗯...我做了一些更改,现在可以使用...
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=*" %%i in (servers.txt) do (
set file=original.xlm
set insertline=9
SET /a "uur=(!RANDOM!*6/32768^)+10"
SET /a "minuut=(!RANDOM!*50/32768^)+10"
set output=output.XLM
echo !uur!:!minuut!
(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
)
)
)
我认为这改变了所有的百分比!在FOR