将超过 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)根文件系统移动到另一个硬盘驱动器?
Linux使用find查找最后修改时间超过三天的文件并移动到指定目录