从具有相同名称但扩展名不同的文件(* .pdf和* .rtf),如果* .rtf较新,则在控制台上输出消息

时间:2017-04-09 20:39:48

标签: powershell

我的文件夹和子文件夹包含两个不同扩展名的文件。我需要检查两个相应文件的最后写入时间 例如

file1.rtf
file1.pdf
file2.rtf
file2.pdf
file3.rtf
file3.pdf

......等等

我需要确保RTF文件在PDF文件之前运行。如果PDF早于RTF,则表示这是一个错误。我需要在powershell控制台上输出这些文件名,并带有指示此错误的消息。任何帮助,将不胜感激。我试图找到并运行我在网上找到的不同代码,但没有任何效果。谢谢。代码代码

$path = Read-Host "Enter Path"
$files = Get-ChildItem -Path $path -Filter "*.txt"            

$files | %{ 
    $rtf=$($_.BaseName+".rtf")
    If (Test-Path $rtf){
    If ($_.LastWritetime -lt (Get-Item $rtf).LastWriteTime){

    $file = $_.OpenText();            
    $lineNum = 1;            
    Write-Host "Checking file"$_.Name -f Yellow  "$_ is older than $rtf file"   ;            
    while($file.EndOfStream -ne $true)            
    {   
        $line = $file.ReadLine();                    
        if($line -ne $null)            
        {  
            if($line.ToLower().Contains("error") -or $line.ToLower().Contains("exception"))            
            {  
                Write-Host "Line: $lineNum " -NoNewline -ForegroundColor Green;            
                Write-Host $line -f Red;            
            }            
        }             

        $lineNum++;                   
    }            
}            
}
} 

2 个答案:

答案 0 :(得分:1)

您可以使用Group-Object cmdlet按文件的基本名称(不带扩展名的文件名)对文件进行分组,然后查看每个组中哪一个最旧:

Get-ChildItem C:\Path\To\Files\* -Include *.pdf,*.rtf |Group-Object BaseName |ForEach-Object {
    if($_.Count -lt 2){
        Write-Warning "Only $($_.Group[0].Name) is present"
    }
    else{
        $Oldest = $_.Group |Sort-Object LastWriteTime |Select-Object -First 1
        if($Oldest.Extension -eq '.pdf'){
            Write-Warning "$($Oldest.Name) is older than RTF file"
        }
    }
}

答案 1 :(得分:1)

Set-Location C:\Path\To\Files\
Get-ChildItem -Filter *.rtf |ForEach-Object {
    $pdf=$($_.BaseName+".pdf")
    If (Test-Path $pdf){
        If ($_.LastWritetime -gt (Get-Item $pdf).LastWriteTime){
            Write-Warning "$_ is newer than $pdf file"
        }
    }
}