首页 > 解决方案 > PowerShell Get-Date 在移动的文件上写入不正确的日期

问题描述

我正在创建一个 PowerShell 循环,它将监视和记录特定文件夹中的“新”文件。当在文件夹中找到新文件时,我拆分文件名的一部分并将该部分和文件的日期写入文本文档。在第二遍时,脚本应该读取日志,如果文件的名称和日期已经存在,则应该跳过写入。

我的问题是,当新文件放入文件夹时,脚本会写入文件的拆分名称和当前日期/时间。在第二遍时,它会写入文件的拆分名称和修改日期,这正是我想要的。我试过同时使用Get-Date ($file).LastWriteTimeand $file | Get-Date(见第 25 和 26 行)。两个 cmdlet 在第一次传递时提供当前日期,在第二次传递时提供实际修改/创建日期。

也许这不是监视文件夹的最佳方式。我对这种性质的建议持开放态度。欢迎任何建议!

#start loop
while($true){
    #clear $asin
    $asin = ""

    #address $outputFolder and identify $outputFiles
    $outputFiles = GCI -Path $outputFolder -Filter *.jpg -Recurse

    #isolate the $asin from each $outputFile
    foreach($file in $outputFiles){
        $asin = $file.name
        $asin = $asin.split('.')[0]
        Write-Host 'this is the asin'
        echo $asin

        #isolate the $asin + $variant from each $outputFile
        $variant = $file.name
        $variant = $variant.split('.')[1]
        $variant = $asin + '.' + $variant
        Write-Host 'this is the variant'
        echo $variant

        #get file $creation (reads 'Date modified' not 'Date created' as 'Date created' changes when files move)
        $creation = Get-Date ($file).LastWriteTime
        #$creation = $file | Get-Date
        echo $creation

        #read if $list contains $asin or not
        $listContents = Get-Content $list
        if($listContents -notcontains $asin + ' ' + $creation){
            Write-Host "Preparing to log $asin"
            $asin + ' ' + $creation | Add-Content $list
            #log asin at this point

        } elseif ($listContents -contains $asin + ' ' + $creation){
            Write-Host "$asin has already been logged"
        }

    }

}

标签: powershell

解决方案


推荐阅读