2017-07-24 3 views
1

Ich versuche, Dateien von einem Quellordner in einen Zielordner zu kopieren über. Ich möchte nur Dateien kopieren, die in den letzten 20 Minuten geändert wurden. Während ich kopiere, möchte ich auch das Datum und die Uhrzeit an das Ende des Dateinamens anhängen. Das Skript, das ich zur Zeit habe, ist:Kopieren und Umbenennen von Dateien in Schlußtag Modified Powershell Mit

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

Ich erhalte Fehlermeldungen in Powershell, wenn ich versuche, meine scipt zu testen:

kann nicht „2017.07.21 07.31.01“ auf "vergleichen 00:20:00 ". Fehler: 00.20.00 ‚Wert vom Typ ‚System.TimeSpan‘eingeben„System.DateTime ‚Kann das nicht konvertieren‘‘.“ In Zeile: 2 Zeichen: 9 + if ($ File.LastWriteTime $ Zeitspanne -gt) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo: InvalidOperation: (:) [], Runtime + FullyQualifiedErrorId: ComparisonFailure

+1

Welche Fehler werden Sie bekommen? Fehlermeldungen in PowerShell sind in der Regel *** ziemlich informativ, sowohl was falsch ist und wo es falsch ist. Wenn Sie die Fehlermeldungen in Ihre Frage aufnehmen, ist es einfacher, Sie zu unterstützen. –

Antwort

5

Sie einen Datetime mit einem Timespan zu vergleichen. Das ergibt keinen Sinn. Ein Datetime ist ein Zeitpunkt. Eine Zeitspanne ist eine Dauer. Sie müssen zwei Daten vergleichen.

Versuchen:

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

kann ich nicht sagen, ob es ein Fehler ist in Ihrer Copy-Item Linie oder nicht. Vielleicht möchten Sie ein Dollarzeichen und ein Leerzeichen vor dem Datum, aber ich vermute, das ist nicht richtig.

+0

@ user6391187 Ich habe korrigiert auch das Datums-Zeitformat 24 Stunden Zeit zu verwenden ('HH'). Ihr bestehendes Format verwendet nur 12 Stunden Zeit ('hh'), was zu Verwirrung führen könnte. –

3

nach dem Fehler, den Sie eingefügt Powershell Schwierigkeiten hat, einen System.TimeSpan dem Typ System.DateTime konvertieren. Das sind zwei verschiedene Objekte und du musst eins in das andere werfen, bevor sie zusammen arbeiten.

Verwandte Themen