【问题标题】:Powershell - Move files in different folders every hourPowershell - 每小时移动不同文件夹中的文件
【发布时间】:2018-09-28 04:55:24
【问题描述】:

尝试将图像从一个文件夹移动到另一个文件夹,但这需要每小时安排一次,一次移动一个块,我将图像分块到文件夹中,每个文件夹中有 1000 个图像。

文件夹结构;

搬家\1 搬家\2 搬家\3 搬家\4 [等.. 最多 66]

这些文件正在被移动到网络上的单个文件夹\\images\web\upload

是否可以使用 Powershell 脚本来实现这一点,或者有什么简单的方法可以做到这一点?

【问题讨论】:

  • 嗯,是的,使用 PowerShell 很容易完成。你试过什么吗?您可以非常简单地将这些文件夹中的每一个放入一个数组中,然后在每个循环之间使用 Start-Sleep -s 3600 循环遍历该数组。
  • 我不会使用Start-Sleep,因为这意味着如果它挂起或失败,您只有一个长时间运行的选项来恢复。而是使用任务计划程序,因为它旨在按计划运行任务。

标签: powershell


【解决方案1】:

我不会像 cmets 中提到的那样使用 Sleep,这意味着您只有一个长时间运行的脚本,并且从故障中恢复的选项最少。如果脚本崩溃,则在重新启动之前不会再发生复制操作。

改为使用任务计划程序每小时运行一次脚本。它旨在按计划运行任务,并具有处理失败和重新运行的选项。

每个任务都在自己的进程中运行,因此如果前一个任务失败,它不会影响下一个任务 - 仍然正常运行。


无需将图像批量放入文件夹,您可以使用Select-Object 为您完成此操作。

Get-ChildItem C:\folder\source -File -Recurse | Select-Object -First 1000 | Move-Item -Destination \\images\web\upload -WhatIf

这将按名称和路径选择前 1000 个文件:

C:\文件夹\源\imageA.jpg C:\文件夹\源\imageB.jpg C:\文件夹\源\文件夹A\imageF.jpg C:\文件夹\源\文件夹A\imageE.jpg C:\文件夹\源\文件夹B\imageD.jpg C:\文件夹\源\文件夹C\imageC.jpg

并将它们全部移动到文件夹\\images\web\upload

\\images\web\upload\imageA.jpg \\images\web\upload\imageB.jpg \\images\web\upload\imageC.jpg \\images\web\upload\imageD.jpg [ETC]

注意:这假设您使用的是现代版本的 Powershell,因为 -File 参数在早期版本中不可用。

【讨论】:

  • 感谢您的回答,但是,我收到以下错误;知道为什么吗? Move-Item:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者输入及其属性不匹配任何接受管道输入的参数。在 C:\Users\yash\Desktop\File-Move.ps1:1 char:70 + 前 1000 |移动项目-目的地 \\server\images\Web\。 + CategoryInfo: InvalidArgument: (image1.jpg:PSObject) [Move-Item], ParameterBindingException + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.MoveItemCommand
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2019-07-11
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多