폴더의 어떤 .txt 파일에 특정 텍스트가 포함되어 있는지 식별하는 실행 가능한 프로세스 만들기

폴더의 어떤 .txt 파일에 특정 텍스트가 포함되어 있는지 식별하는 실행 가능한 프로세스 만들기

내 운영 체제는 Windows 10입니다.

하나 이상의 .txt 파일이 포함된 폴더가 있습니다. 각 파일에는 다음과 같은 형식의 줄이 있습니다.

2016-12-07 14:08:43 7.7 b=123 r=890

나는 폴더의 모든 파일을 살펴보고 포함된 모든 파일의 .txt 파일 이름 6.7과 7일 이전 날짜를 제공하는 실행 가능한 재현 가능한 프로세스를 만들려고 합니다.

예시 시나리오:

파일1에는 다음이 포함됩니다.2016-12-07 14:08:43 7.7 b=123 r=890

파일 2에는 다음이 포함됩니다.2017-01-24 14:08:43 7.7 b=123 r=890

파일3에는 다음이 포함됩니다.2017-01-23 14:08:43 6.7 b=123 r=890

프로세스를 실행하면 다음이 포함된 .txt 파일이 수신됩니다.File3

명령줄이나 PowerShell을 사용하여 이 작업을 수행할 수 있는지, 아니면 이 작업을 수행하려면 완전한 개발 노력이 필요한지 모르겠습니다.

답변1

PowerShell 스크립트 따르기

Get-ChildItem *.txt -Recurse |
    ForEach-Object { 
        $aux=$_
        Get-Content "$aux" | 
            ForEach-Object {
                if ($_ -match '6\.7') {
                    if ( [datetime] $_.Substring(0,19) -gt (Get-Date).AddDays(-7)) {
                        $aux.FullName
                    }
                }
            }
    }

또는 이에 상응하는 oneliner

Get-ChildItem *.txt -Recurse | ForEach-Object { $aux=$_; Get-Content "$aux" | ForEach-Object {if ($_ -match '6\.7') {if ( [datetime] $_.Substring(0,19) -gt (Get-Date).AddDays(-7)) {$aux.FullName}}}}

기본 설명:

  • txt파일 목록을 가져오고 Get-ChildItem결과 |를 다음 cmdlet으로 파이프합니다.
  • (파이프)모든 특정 파일에 대해ForEach-Object
  • 보조 변수에 저장합니다 $aux=$_( ;oneliner의 후행 세미콜론 참고).
  • 내용을 한 줄씩 가져오고 Get-Content결과 |를 다음 cmdlet으로 파이프합니다.
  • (파이프)모든 특정 라인에 대해ForEach-Object
  • 줄에 6.7문자열이 포함되어 있는지 테스트if ($_ -match '6\.7')
  • 그렇다면 날짜(처음 19자)가 주어진 기준과 일치하는지 테스트합니다.if ( [datetime] …
  • 그렇다면 공개 파일 이름을 만드십시오. $aux.FullName
  • {일련의 종료 s를 사용하여 모든 오프닝 s를 닫습니다 }.

답변2

JosefZ의 원래 답변을 확장하면 다음 답변이 더 완전하다는 것을 알았습니다.

PowerShell 파일 내에 다음을 포함합니다.

$filespath = "\\sampledirectory\log\"
$outputfilename = "\\sampledirectory\log\results.txt"

########## file creation step
Get-ChildItem -Path $filespath *.txt -Recurse |
    ForEach-Object { 
        $aux=$_
        Get-Content "$aux" | 
            ForEach-Object {
                if ($_ -match '6\.7')
                {
                    if ( [datetime] $_.Substring(0,19) -gt (Get-Date).AddDays(-7))
                    {
                        $aux.FullName | Out-File $outputfilename -append
                    }
                }
            }
    }

관련 정보