【问题标题】:Check SCHTASKS Status in Batch File检查批处理文件中的 SCHTASKS 状态
【发布时间】:2016-10-23 09:18:14
【问题描述】:

我已经使用以下命令编写了一个批处理文件来检查 schtasks 状态,并且我打算将其放入一个循环中。

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (IF %%I == 0 ( SET STATUS=Running) Else ( SET Status=Ready))
ECHO %%I
ECHO %STATUS%

但我收到以下错误:

ECHO is off.
ECHO is off.

如果我写以下内容:

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO 
(IF %%I == 0 ( SET STATUS=Running) Else ( SET Status=Ready))
ECHO %%I
ECHO %STATUS%

如果我执行上述操作,则会得到以下结果:

The syntax of the command is incorrect

如果我写以下内容:

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (IF %%I == 0 ( SET STATUS=Running) Else ( SET Status=Ready))
ECHO %STATUS%

如果我执行上述操作,则会得到以下结果:

Running

谁能帮我写剧本。

【问题讨论】:

  • "但我收到以下错误:ECHO 已关闭。" - 这不是错误,这是您在没有参数的情况下调用 echo 时得到的,它报告状态。你在第一行的末尾用)) 结束for 循环,ECHO %%I 在循环之外。第二个不正确,因为您必须将(do 放在同一行,而不是在下一行。您还需要在 Google EnableDelayedExpansion 上搜索您的环境变量。
  • 你知道 PowerShell 可以做到 (Get-ScheduledTask 'deploy_db').StateGet-ScheduledTask |Where State -eq Running 对吗?
  • 我是 Powershell 的菜鸟,我怎么能把它放在 Loop 中。运行一个 Schtask 并继续检查直到它完成?
  • Start-ScheduledTask 'whatever'; start-sleep -seconds 5; while ((Get-ScheduledTask 'whatever').state -eq Running) { start-sleep -seconds 5 }
  • 您必须在“-eq”运算符的右侧提供一个值表达式。在 C:\resources\code\Test\Schtask_t.ps1:4 char:48 + while ((Get-ScheduledTask 'whatever').state -eq

标签: windows batch-file batch-processing


【解决方案1】:

如果您只输入 echo 后面没有任何内容,您将收到消息 ECHO is off.(或 on)。这表明您的变量为空。

一旦您离开FORDO 部分,变量%%I 就会失去作用域。如果我没有提供 schtasks 的完整路径,我也无法让线路运行。

这对我有用:

FOR /F %%I IN ('C:\Windows\System32\schtasks.exe /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (
    IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready)
    ECHO %%I
)
ECHO %STATUS%

如果您处于循环状态,您可能会遇到 STATUS 更新问题。如果是这样,请尝试:

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%I IN ('C:\Windows\System32\schtasks.exe /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (
    IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready)
    ECHO %%I
)
ECHO !STATUS!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多