如何在Windows CMD中用正则筛选schtasks含“Schedule Type: Daily”的结果块
可行解决方案
方案1:使用PowerShell实现(推荐,Windows系统默认自带)
直接在CMD中运行以下命令即可,无需切换到PowerShell环境:
powershell -Command "(schtasks /query /fo LIST /v | Out-String) -split '(\r?\n){2}' | Where-Object { $_ -match 'Schedule Type: Daily' }"
命令逻辑说明:
- 先将schtasks的所有输出转换为单个完整字符串,再按两个连续换行(即不同任务块的分隔符)拆分
- 直接筛选所有包含
Schedule Type: Daily的块输出,完全匹配你需要的完整任务块格式
方案2:仅使用CMD原生工具实现
findstr本身不支持跨行匹配,无法通过单条findstr正则实现需求,你可以使用以下批处理逻辑实现:
@echo off setlocal enabledelayedexpansion set "block=" for /f "delims=" %%a in ('schtasks /query /fo LIST /v') do ( set "line=%%a" if not "!line!"=="" ( set "block=!block!!line! " ) else ( echo !block! | findstr /c:"Schedule Type: Daily" >nul && echo !block! set "block=" ) ) echo !block! | findstr /c:"Schedule Type: Daily" >nul && echo !block! endlocal
将上述代码保存为.bat后缀的批处理文件,直接在CMD中运行即可。
原命令失效原因说明:
findstr的正则默认不支持跨行匹配,也不支持直接用\n匹配换行符,通配符.也不会识别换行- 你写的
[.|\n]不符合findstr正则语法,方括号内的.和|会被识别为普通字符,不会生效
内容的提问来源于stack exchange,提问作者spookymonkey
相关产品推荐
相关产品推荐

