web-dev-qa-db-ja.com

31日以上経過したファイルを別のドライブに移動する

Function Move {
  #Moves all files older than 31 days old from the Source folder to the Target 
  Get-Childitem -Path "E:\source" | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-31)} |
  ForEach {
    Move-Item $_.FullName -destination "F:\target" -force -ErrorAction:SilentlyContinue
  }
}

ソースディレクトリには2〜3年以上古いファイルがありますが、スクリプトを実行すると、ターゲットディレクトリに何も移動しません。どうしましたか ?

12

これが違いをもたらすかどうかはわかりませんが、$ではありません。 $ _である必要があります。

私はこのスクリプトを試してみましたが、うまくいきました。

get-childitem -Path "E:\source" |
    where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    move-item -destination "F:\target"

オブジェクトはmove-itemコマンドに「パイプ」されるため、foreachループは必要ありません。

23

また、隠しファイルにも注意してください。-ForceからGet-ChildItem

4
Matias