Мне нужны столбцы TaskName и Status, отображаемые с помощью команды schtasks.

Я пробовал следующее:

for /f "tokens=1,3 delims= " %i in ('schtasks') DO echo %i

Результат не очень красивый. Текущий выход, если я запускаю schtasks:

C:\Windows\system32>schtasks
Folder: \Microsoft\Windows\WwanSvc
TaskName                               Next Run Time          Status
NotificationTask                         N/A                    Ready
Folder: \Microsoft\XblGameSave
TaskName                                 Next Run Time          Status
XblGameSaveTask                          N/A                    Ready

Пример желаемого результата:

Folder: \Microsoft\Windows\WwanSvc
TaskName                                      Status
NotificationTask                               Ready
Folder: \Microsoft\XblGameSave
TaskName                                       Status
XblGameSaveTask                                Ready
1
jenhenry 20 Янв 2021 в 00:09

2 ответа

Лучший ответ

Хотя он не дает точно такой же результат, как ваш желаемый пример, мне кажется полезным (и лучше) следующее:

schtasks /query /fo list | findstr /r "^Folder: ^TaskName: ^Status: ^$"

Что должно обеспечить такой вывод:

Folder: \Microsoft\Windows\WwanSvc
TaskName:      \Microsoft\Windows\WwanSvc\NotificationTask
Status:        Ready

Folder: \Microsoft\XblGameSave
TaskName:      \Microsoft\XblGameSave\XblGameSaveTask
Status:        Ready

Кстати, я не уверен, для какой версии Windows вы это намереваетесь, но, безусловно, от Windows Vista до Windows 10, это формат вывода, который я привык видеть из schtasks:

Folder: \Microsoft\Windows\WwanSvc
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
NotificationTask                         N/A                    Ready

Folder: \Microsoft\XblGameSave
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
XblGameSaveTask                          N/A                    Ready

Это означает, что ваш вывод из предоставленного вами кода будет выглядеть так:

Folder:
TaskName
========================================
NotificationTask
Folder:
TaskName
========================================
XblGameSaveTask

Это также означает, что для получения желаемого результата вам нужно будет опустить границы заголовка таблицы, а также второй столбец таблицы.


Учитывая это, вот довольно OTT-метод потенциального достижения этого из :

@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
Set "{=                                          "
For /F "Delims=" %%G In ('%SystemRoot%\System32\schtasks.exe /Query ^
 ^| %SystemRoot%\System32\findstr.exe /R "^[^=]"') Do (Set "}=%%G"
    SetLocal EnableDelayedExpansion & Set "}=!}:  =|!"
    For /F "Tokens=1,3 Delims=|" %%H In ("!}:| =||!") Do If "%%I" == "" (
        Echo %%H) Else Set "z=%%H%{%" & Echo=!z:~,41!%%I
    EndLocal)
Pause

Это должно вывести для вас следующее:

Folder: \Microsoft\Windows\WwanSvc
TaskName                                 Status
NotificationTask                         Ready
Folder: \Microsoft\XblGameSave
TaskName                                 Status
XblGameSaveTask                          Ready
0
Compo 20 Янв 2021 в 02:22

С PowerShell довольно просто.

Get-ScheduledTask | Select-Object -Property TaskPath,TaskName,State | Format-List *

Если вы не можете запустить консоль PowerShell, вы можете сделать это из cmd.exe.

powershell -NoLogo -NoProfile -Command ^
    "Get-ScheduledTask | Select-Object -Property TaskPath,TaskName,State | Format-List *"
0
lit 19 Янв 2021 в 21:30