【发布时间】:2020-10-15 21:19:30
【问题描述】:
我正在尝试创建一个脚本,目的是根据目标服务器在 W2K3 或 W2K12 服务器(稍后添加更多内容)上创建计划任务。我不会为每种服务器类型创建单独的脚本,因为这已经是需要通过单个包分发的安装脚本包的一部分。 服务器有不同的用户。 我尝试了以下方法,但 两个 作业是在每种服务器类型上创建的,其中一个是多余的,因为它不适合。我只希望根据服务器类型创建 一个 计划任务。 目前我对如何解决它有点盲目,避免使用“goto”也很好。非常感谢您对此的看法。
setlocal
set runlevel=
for /f "tokens=2*" %%i in ('reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"') do set os_ver=%%j
if /i "%os_ver:~,1%" EQU "5.2" (
set runlevel=/rl HIGHEST goto W2K3
exit
)
else
(
if /i "%os_ver:~,1%" GEQ "6.2" (
set runlevel=/rl HIGHEST goto W2K12
exit
)
)
:W2K3
schtasks.exe /create /tn "Files Handler W2K3" /sc DAILY /TR "D:\TMP_DONT_DELETE\Files_Handler.bat" /ST 05:30 /ru User1 /rp epicfun %runlevel%
:w2K12
schtasks.exe /create /tn "Files Handler W2K12" /sc DAILY /TR "D:\TMP_DONT_DELETE\Files_Handler.bat" /ST 05:30 /ru User2 /rp newkidontheblock %runlevel%
【问题讨论】:
-
尽管您提供的代码中有几个错误,但更重要的是要提一下,据我所知,schtasks.exe 运行级别,
/RL,选项在windows-server-2003. -
除此之外,您也可能在使用该注册表项值时遇到问题。我发现有几个windows-10 系统的
CurrentVersion字符串值为6.3,这与拥有windows-server-2012-r2 或windows-8.1 系统没有什么不同。 -
我的脚本在 W2K3 和 W2K12 上运行良好,但我知道 CurrentVersion 值可能会有所不同。这是我可以很容易调整的。
-
现有代码无法正常工作。
ELSE不能与括号分开。 -
表达式
%os_ver:~,1%返回变量os_ver的内容的第一个字符,它永远不能等于由三个字符组成的字符串……
标签: batch-file scheduled-tasks