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 スクリプトを実行したことがない場合は、スクリプトの実行を許可するために次のコマンドを 1 回実行する必要があります。

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

.\これが完了したら、に続けてスクリプトの名前を入力することで、PowerShell プロンプトからスクリプトを呼び出すことができます(例.\phpstatus.ps1: )。(タブ補完が機能します)。出力は PowerShell オブジェクトのコレクションであるため、それらに対して標準の PowerShell データ管理コマンドを使用できます。

関連情報