Windows의 쿼리와 일치하거나 일치하지 않는 파일 목록 가져오기

Windows의 쿼리와 일치하거나 일치하지 않는 파일 목록 가져오기

.php다른 폴더로 구성된 특정 확장자( )를 가진 ~150개의 파일이 포함된 디렉토리 트리가 있습니다 . 이러한 파일 중 일부는 특정 상태를 나타내기 위해 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:위에 붙여넣은 버전은 원하는 작업을 수행합니다.

스크립트를 파일( .ps1phpstatus.ps1: . 이전에 PowerShell 스크립트를 실행한 적이 없다면 이 명령을 한 번 실행하여 스크립트 실행을 허용해야 합니다.

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

완료되면 .\이름 뒤에 이름을 입력하여 PowerShell 프롬프트에서 스크립트를 호출할 수 있습니다(예: ) .\phpstatus.ps1. (탭 완성 기능이 작동합니다.) 출력은 PowerShell 개체의 컬렉션이므로 표준 PowerShell 데이터 관리 명령을 사용할 수 있습니다.

관련 정보