ファイルの最終書き込み時刻を使用してファイルをあるフォルダから別のフォルダに移動するpowershellスクリプトがあります。スクリプトは、lastwritetimeが指定された日付以下であるかどうかをチェックしています。今年の変更でこれはもはや正しく動作していないようです。私は12/29/2016、12/30/2016、および1/20/17の修正された日付のファイルを持っています。 12/29ファイルは、今日の1/13/2017以降に移動された唯一のファイルであってはならず、スクリプトはその日付から5日を引いたものを使用しています。したがって、それは12/29/2016以下のものだけを移動したはずです。しかし、2011年1月2日のファイルも移動されました。スクリプトは以下の通りですが、なぜこれが起こっているのかについてのアイディアです。Powershellスクリプトはlastwritetimeに基づいて間違ったファイルを移動しています
#Grab the day of the week it is TODAY
$DayofWeek = (Get-Date).DayofWeek
#Set the location we are going to be Pulling Files From
$FromPath = "path i'm copying files from goes here"
#Set the Location we are going to copy file To
$ToPath = "path i'm copying files to"
#Set a Default Value for DaysBack to Zero
$DaysBack = 0
#Set the Days Back if it is Tuesday through Friday
switch ($DayofWeek)
{
"Tuesday" { $DaysBack = -5 }
"Wednesday" { $DaysBack = -5 }
"Thursday" { $DaysBack = -3 }
"Friday" { $DaysBack = -3 }
"Saturday" { $DaysBack = -3 }
#If today is not an above day then tell the user today no files should be moved
default { Write-host "No files to move!" }
}
#if DaysBack does not equal ZERO then there are files that need to be moved!
if($DaysBack -ne 0) {
Get-ChildItem -Path $FromPath |
Where-Object { $_.LastWriteTime.ToString("MMddyyyy") -le (Get-Date).AddDays($DaysBack).ToString("MMddyyyy") } |
Move-Item -Destination $ToPath
}
'LastWriteTime'プロパティは' DateTime'オブジェクトで使用することができます。文字列に変換する必要はありません( '.toString()')。 –
あなたのスクリプトを壊しているだけでなく、必要はありません。日付比較をテキスト比較に変更しています.MMddyyyyの最初の4文字は '1229'と' 1220'です。 – TessellatingHeckler
これは、他のテキストベースのシェルで動作していたPowerShellを初めて使用する人にとって共通の概念上のハードルであるため、「不要」と言います。 'DateTime'オブジェクトを直接使うことができます。 –