将超过 31 天的文件移动到另一个驱动器

Posted

技术标签:

【中文标题】将超过 31 天的文件移动到另一个驱动器【英文标题】:Move Files older then 31 days to another drive 【发布时间】:2011-05-06 13:21:56 【问题描述】:
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 年的文件,但是当我运行脚本时,没有任何东西移动到目标目录?!怎么了?

【问题讨论】:

如果取出ErrorAction会产生任何错误吗? 您的文件是在E:\source 中还是在其子目录中?在后一种情况下使用Get-Childitem -Recurse 仅供参考,不会移动子目录中的文件。 我建议在脚本中使用带有 /mov 和 /minage: flags 的 robocopy 命令。 【参考方案1】:

我不知道这是否有很大的不同,而不是 $.它必须是 $_。

我试过这个脚本,它对我来说很好用:

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

请注意,您不需要 foreach 循环,因为对象将通过管道“传送”到 move-item 命令中

【讨论】:

get-currentitem 你的意思是 Get-Childitem 吗? 为什么它对我不起作用...很奇怪。我考虑了 foreach 以避免出现问题,因为我们在某些目录中有 20k+ 文件.... @JPBlanc:非常感谢,是的,我的意思是 get-childitem。我习惯写gci。更新了我的帖子 @Maurizio Schmidt:如果您在子文件夹中有文件,则不会这样做。您必须在 get-childitem 上使用 -Recurse 标志,此外,您还必须弄清楚如何移动到目的地上的正确文件夹 @Matthew:现在它可以完美运行了,谢谢。我认为 foreach 等是必要的,以避免由于在某些目录中我们有超过 30.000 个文件而导致的内存消耗问题。【参考方案2】:

还要注意隐藏文件,尝试将-Force 添加到Get-ChildItem

【讨论】:

以上是关于将超过 31 天的文件移动到另一个驱动器的主要内容,如果未能解决你的问题,请参考以下文章

将 android-sdk 和 sdk 文件夹移动到另一个驱动器

将 WSL(Windows 上的 Bash)根文件系统移动到另一个硬盘驱动器?

sh 将电视节目或电影目录移动到另一个文件夹或驱动器

Linux使用find查找最后修改时间超过三天的文件并移动到指定目录

如何将 MySQL 数据库从一个硬盘驱动器移动到另一个硬盘驱动器?

谷歌驱动器中的文件夹移动事件