获取 Windows 中与查询匹配/不匹配的文件列表

获取 Windows 中与查询匹配/不匹配的文件列表

我有一个目录树,其中包含约 150 个具有特定扩展名 ( .php) 的文件,这些文件组织到不同的文件夹中。其中一些文件在第 2 行被标记以指示某种状态。我知道这个标记始终在第 2 行,并且始终遵循特定的格式。

我正在寻找某种东西(命令、脚本、程序),它可以在目录中搜索这个标记并提供这样的输出,但采用易于操作的格式:

示例输出

理想的解决方案是提供所有.php文件的列表,文件的第 2 行位于文件名旁边。上面的列表仅对匹配的文件执行此操作。

我尝试过find循环使用for

for %f in (*.php) do find "Oracle Status" %f

但这只会搜索当前目录,并且不会以友好的方式格式化它。

答案1

如果您可以使用 PowerShell,那么此脚本应该可以完成这项工作:

Get-ChildItem *.php -Recurse | ForEach-Object {
 $lines = Get-Content $_ -TotalCount 2
 If ($lines.Length -GT 1 -And $lines[1].Length -GT 1 -And $lines[1].Contains('Oracle Status:')) {
  New-Object -TypeName PSObject -Prop @{'FilePath' = $_.FullName; 'StatusLine' = $lines[1]}
 }
}

它在控制台中产生如下输出:

结果

此处显示的版本使用.txt一行来搜索文件Status:,但上面粘贴的版本可以满足您的要求。

将脚本另存为.ps1文件,例如phpstatus.ps1。如果您以前从未运行过 PowerShell 脚本,则需要运行此命令一次以允许执行脚本:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

完成后,您可以通过在 PowerShell 提示符下键入脚本.\名称来调用该脚本,例如.\phpstatus.ps1。 (Tab 补全有效。)由于输出是 PowerShell 对象的集合,因此您可以在它们上使用标准 PowerShell 数据管理命令。

相关内容