如何 extract/display 命令输出中的任意两列及其值?
How to extract/display any two columns and their values from command output?
我需要 schtasks
命令显示的任务名称和状态列。
我尝试了以下方法:
for /f "tokens=1,3 delims= " %i in ('schtasks') DO echo %i
输出不太好看。当前输出如果 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
使用 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: ^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
这也意味着要获得您想要的输出,您需要省略 table header 边框以及第二个 table 列。
鉴于此,这里有一个相当 OTT 的方法可以从 batch-file:
@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
我需要 schtasks
命令显示的任务名称和状态列。
我尝试了以下方法:
for /f "tokens=1,3 delims= " %i in ('schtasks') DO echo %i
输出不太好看。当前输出如果 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
使用 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: ^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
这也意味着要获得您想要的输出,您需要省略 table header 边框以及第二个 table 列。
鉴于此,这里有一个相当 OTT 的方法可以从 batch-file:
@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