当前位置: 首页 > 知识库问答 >
问题:

使用批处理文件在任务调度程序中启动vbs脚本

韦绍晖
2023-03-14

不幸的是,我在其他线程中找不到适合我的解决方案。

我试图通过批处理文件使用任务调度程序运行vb脚本,当我手动启动vbs和bat文件时,它们都可以正常工作,但在任务调度程序中不能。我尝试了多种组合(我也尝试直接启动vbs),但似乎没有任何效果。.bat和.vbs都直接在C中:\

VBS文件:

Set WshShell = WScript.CreateObject("WScript.Shell") 
Set Word = CreateObject("Word.Application") 
Set Tasks = Word.Tasks 
For Each Task in Tasks 
  If Task.Visible Then 
    if inStr(Task.name, "(Formal module) - DOORS") then 
      WshShell.AppActivate Task.name 
      WshShell.SendKeys "^s" 
      WScript.Sleep 2000 
      WshShell.SendKeys "%e" 
      WScript.Sleep 200 
      WshShell.SendKeys "e" 
      WScript.Sleep 200 
      WshShell.SendKeys "r" 
      WScript.Sleep 200 
      WshShell.SendKeys "%e" 
      WScript.Sleep 100 
      WshShell.SendKeys "e" 
      WScript.Sleep 100 
      WshShell.SendKeys "r" 
      WScript.Sleep 100 
    Else 
    End If 
  End If 
Next 
Word.Quit 
Set Word = CreateObject("Word.Application") 
Set Tasks = Word.Tasks 
For Each Task in Tasks 
  If Task.Visible Then 
    if inStr(Task.name, "(Formal module) - DOORS") then 
      WshShell.AppActivate Task.name 
      WshShell.SendKeys "^s" 
      WScript.Sleep 2000 
      WshShell.SendKeys "%e" 
      WScript.Sleep 200 
      WshShell.SendKeys "e" 
      WScript.Sleep 200 
      WshShell.SendKeys "r" 
      WScript.Sleep 200 
      WshShell.SendKeys "%e" 
      WScript.Sleep 100 
      WshShell.SendKeys "e" 
      WScript.Sleep 100 
      WshShell.SendKeys "r" 
      WScript.Sleep 100 
    Else 
    End If 
  End If 
Next 
Word.Quit 

批处理文件:

%windir%\SysWoW64\cmd.exe /C "c:\windows\system32\cscript.exe //B //nologo C:\unlock_doors.vbs"

计划的Tesk导出:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2017-04-04T12:38:00.000</Date>
    <Author>CCANET\tczimmer</Author>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2017-04-04T00:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>CCANET\tczimmer</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>StopExisting</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT5M</Interval>
      <Count>2</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\unlock_doors.bat</Command>
      <WorkingDirectory>C:\</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

共有1个答案

阎自怡
2023-03-14

我遇到了一个类似的问题,任务调度程序只是不会执行我的vbs。我所做的是创建一个单独的“timer.vbs”文件,该文件具有无限循环,检查当它到达6:00 AM时它将执行我的脚本的时间。所以你在这里有几个选择,但是在你的情况下,为了让你不必重写任何代码,你可以创建一个timer.vbs文件,仍然在c:\根本身

 'timer.vbs
 Set objShell = Wscript.CreateObject("Wscript.Shell")

 Do
      Wscript.Sleep 1000
      If Time() = TimeValue("12:00:01 AM") Then 'Or modify to the time you need
           objShell.Run "c:\windows\system32\cscript.exe /B /nologo C:\unlock_doors.vbs"
      End If
 Loop

只要此脚本在开启的主机上运行,它就应该在指定的TimeValue执行。

因此,基本上打开一个cmd提示符并在该命令提示符下运行cscript timer.vbs,并最小化该ommand提示符,然后对该主机进行正常操作。

 类似资料:
  • 我在任务计划程序中计划了一个批处理文件。如果我从CMD手动运行此批处理文件,它将很好地完成所有工作,大约需要20分钟。但是,如果我在任务计划程序中计划它,它在开始运行时立即完成,并显示结果是“成功完成”。(VBS 没有运行...)此批处理文件将调用 2 个 vbs 脚本来运行。我不确定任务计划程序是否有问题,或者只是批处理文件在那里得到错误的代码。 我在日志文件中得到了错误信息 我只从任务调度器得

  • 我有一个批处理文件,其中包含以下代码以停止和启动SQL报告服务: 我已经设置了每天运行的计划任务,它目前以SYSTEM的形式运行,并设置了最高权限。我在操作上设置了文件夹中的开始选项,通常一切似乎都设置正确。但是当我运行任务时,似乎什么都没有发生,它说任务已经运行,但我看不到服务已经按预期重新启动。 有人能告诉我我错过了什么吗?

  • 我有一个包含4个命令的批处理脚本,如下所示 当我双击批处理文件时,它运行得很好。当我尝试从命令提示符运行批处理文件时,它没有看到要删除的. csv文件,我不确定这是为什么,但我认为这对我的目的并不重要。 当我从task scheduler手动运行任务时,它会截断数据库中的表并删除现有的csv文件,但没有创建新文件,这使我相信它会卡在.vbs文件上。 我试着用。vbs脚本,并将路径传递给。xls和。

  • 我正在尝试自动登录到2008 R2服务器上的一组RDP客户端,当从桌面双击批处理文件时,下面的批处理工作正常,但是当将.bat文件设置为作为任务调度程序中的任务运行时,什么都没有发生 计划任务被设置为在管理员帐户下运行(只有一个可用),并且(开始于)可选字段也被设置为“C:\Users\Administrator\Desktop”。

  • 在我的工作中,我们设置了任务调度程序,定期启动java程序来读取邮件。该任务计划每分钟运行一次,它调用启动java程序的. bat文件。 现在问题来了。大约一个月一次,jave.exe过程不能正常结束,所以下一分钟当它试图运行时,我得到: 任务计划程序无法启动用户“NT 颁发机构\系统”的“\XXX 作业”任务。其他数据:错误值:2147750687。 然后我每分钟都会收到这条消息,直到我从任务管