Cmd 如何从命令输出中提取/显示任意两列及其值?

Cmd 如何从命令输出中提取/显示任意两列及其值?,cmd,windows-task-scheduler,batch-file,Cmd,Windows Task Scheduler,Batch File,我需要从schtasks命令中显示任务名和状态列 我尝试了以下方法: for /f "tokens=1,3 delims= " %i in ('schtasks') DO echo %i 输出不太好看。运行schtasks时的当前输出: C:\Windows\system32>schtasks 文件夹:\Microsoft\Windows\WwanSvc TaskName下次运行时状态 通知任务不适用已就绪 文件夹:\Microsoft\XblGameSave TaskNa

我需要从
schtasks
命令中显示任务名和状态列

我尝试了以下方法:

for /f "tokens=1,3 delims= " %i in ('schtasks') DO echo %i
输出不太好看。运行
schtasks
时的当前输出:

C:\Windows\system32>schtasks
文件夹:\Microsoft\Windows\WwanSvc
TaskName下次运行时状态
通知任务不适用已就绪
文件夹:\Microsoft\XblGameSave
TaskName下次运行时状态
XblGameSaveTask不适用准备就绪
所需输出示例:

文件夹:\Microsoft\Windows\WwanSvc
任务名状态
通知任务就绪
文件夹:\Microsoft\XblGameSave
任务名状态
XblGameSaveTask准备好了吗

使用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 *"

虽然它不能提供与所需示例完全相同的输出,但在我看来,以下内容似乎是可用的(而且更好):

schtasks/query/fo list | findstr/r“^文件夹:^任务名称:^状态:^$”
应提供如下输出:

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

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

顺便说一句,我不确定您打算使用哪个版本的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: \Microsoft\Windows\WwanSvc
TaskName:      \Microsoft\Windows\WwanSvc\NotificationTask
Status:        Ready

Folder: \Microsoft\XblGameSave
TaskName:      \Microsoft\XblGameSave\XblGameSaveTask
Status:        Ready
Folder:
TaskName
========================================
NotificationTask
Folder:
TaskName
========================================
XblGameSaveTask
这也意味着要获得所需的输出,需要省略表头边框以及第二个表列


考虑到这一点,这里有一个相当OTT的方法,可以从以下方面实现这一点:

@Echo Off&SetLocal EnableExtensions DisableDelayedExpansion
设置“{=”
对于(“%SystemRoot%\System32\schtasks.exe/Query)中的/F“Delims=“%%%G”^
^|%SystemRoot%\System32\findstr.exe/R“^[^=]”)Do(Set“}=%%G”
SetLocal EnableDelayedExpansion&Set“}=!}:=|!“
对于/F“Tokens=1,3 Delims=|”%%H In(“!”:|=| |!”),如果“%%I=”,则执行该操作(
Echo%%H)否则设置“z=%%H%{%”&Echo=!z:~,41!%%I
(本地)
暂停
这将为您输出以下内容:

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

你尝试过什么?你发现什么困难?请阅读这些页面,并通过考试了解这里可以问什么样的问题。