【问题标题】:delayed foreach loop延迟的 foreach 循环
【发布时间】:2018-01-22 20:21:58
【问题描述】:

我有一个脚本,它使用foreach 循环将 .pak 文件从 server1 移动到 server2。我需要foreach 循环在文件移动之间等待以进行复制。我希望在循环中添加 30 秒的延迟。

$server1 = "C:\Users\Administrator\AppData\Local\Temp" ## current source folder
$server2 = "C:\Users\Administrator\AppData\Local\Temp\Target\" ## destination folder

foreach ($server1 in gci $server1 -Include *.pak -Recurse) {
    ## Move the files to the destination folder
    Move-Item -Path $server1.FullName -Destination $server2  
}

【问题讨论】:

  • 为什么之间需要等待?
  • 允许文件复制到文件,因为网络速度和流量等很多变量。我不想一次启动数百或数千个文件副本并崩溃到服务器。
  • 你发现副本是同步发生的吗?我很容易出错,但无论如何这些副本应该一次发生一个。不管你应该使用 robocopy 来做这样的事情,因为你可以对其设置速率限制并让它选择你想要的文件。
  • Josh 什么是 robocopy?

标签: powershell foreach


【解决方案1】:

您可以做的最简单的事情是使用Start-Sleep 命令:

foreach ($server1 in gci $server1 -include *.pak -recurse)
{ 
    ## Move the files to the destination folder
    Move-Item -path $server1.FullName -destination  $server2
    Start-Sleep -s 30
}

但是,您可能会发现,取决于任意数量的变量(网络速度等),您等待的时间不够长。然后你要么需要等待更长时间,要么创建一个函数来轮询某些条件是否为真。

我认为 Move-Item 会阻塞直到文件被复制?

【讨论】:

  • 谢谢拉尔夫并回答您的问题,我不确定移动项目是否等待。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多