2017-07-24 152 views
1

我試圖將文件從源文件夾複製到目標文件夾。我只想複製過去20分鐘內修改過的文件。雖然我正在複製,但我還想將日期和時間附加到文件名的末尾。該腳本我現在有是:使用Powershell複製和重命名在前一天修改的文件

$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) 
    } 
} 

我得到PowerShell中的錯誤消息,當我試圖測試我素文字:

無法比較「2017年7月21日7時31分01秒」到「 00:20:00" 。錯誤:「無法將類型 」System.TimeSpan「的」00:20:00「值轉換爲鍵入」System.DateTime「。」 在線:2 char:9 + if($ File.LastWriteTime -gt $ timespan) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo:InvalidOperation:(:) [],的RuntimeException + FullyQualifiedErrorId:ComparisonFailure

+1

你會得到什麼錯誤? PowerShell中的錯誤消息通常會提供很多信息,包括錯誤和錯誤。如果您在問題中包含錯誤消息,那麼協助您將會更容易。 –

回答

5

您正在比較DateTime和TimeSpan。這沒有意義。日期時間是一個時間點。時間跨度是一個持續時間。你需要比較兩個日期。

嘗試:

$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線與否。在日期之前,您可能需要一個美元符號和一個空格,但我猜測這是不對的。

+0

@ user6391187我也修正了日期時間格式以使用24小時時間('HH')。您現有的格式只能使用12小時('hh'),這可能會導致混淆。 –

3

根據要粘貼Powershell的有麻煩轉換System.TimeSpan的類型System.DateTime的錯誤。這些是兩個不同的對象,你必須在他們一起工作之前將其中一個投入另一個。

相關問題