1

ソース フォルダから宛先フォルダにファイルをコピーしようとしています。過去 20 分間に変更されたファイルのみをコピーしたいと考えています。コピー中に、ファイル名の末尾に日付と時刻を追加したいと思います。私が現在持っているスクリプトは次のとおりです。

$DestinationFolder = "C:\Output\"
$timespan = new-timespan -minutes 20
$Files = Get-ChildItem "C:\Input\*" -File
foreach ($File in $Files) {
    if ($File.LastWriteTime -gt $timespan)
    {
        Copy-Item -Path $_.FullName -Destination $DestinationFolder$($_.BaseName)_$ ($_.LastWriteTime.ToString('yyyyMMdd_hhmmss'))$($_.Extension)
    }
}

scipt をテストしようとすると、powershell でエラー メッセージが表示されます。

「2017/07/21 07:31:01」と「00:20:00」を比較できませんでした。エラー: 「"System.TimeSpan" 型の "00:20:00" 値を "System.DateTime" 型に変換できません。」行:2 文字:9 + if ($File.LastWriteTime -gt $timespan) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : ComparisonFailure

4

2 に答える 2

5

DateTime と TimeSpan を比較しています。それは意味がありません。日時は特定の時点です。タイムスパンは期間です。2 つの日付を比較する必要があります。

試す:

$DestinationFolder = "C:\Output\"
$Cutoff = (Get-Date).AddMinutes(-20)
Get-ChildItem "C:\Input\*" -File | Where-Object {
    $_.LastWriteTime -gt $Cutoff
} | ForEach-Object {
    $DestinationFileName = '{0}_{1:yyyyMMdd_HHmmss}{2}' -f $_.BaseName, $_.LastWriteTime, $_.Extension
    $DestinationFullFileName = Join-Path -Path $DestinationFolder -ChildPath $DestinationFileName
    Copy-Item -Path $_.FullName -Destination $DestinationFullFileName
}

あなたのCopy-Item回線にバグがあるかどうかはわかりません。日付の前にドル記号とスペースが必要かもしれませんが、それは正しくないと思います。

于 2017-07-24T18:10:42.923 に答える