【问题标题】:Moving files between two locations constantly不断在两个位置之间移动文件
【发布时间】:2019-08-06 22:29:56
【问题描述】:

我有几个文件需要通过网络在两台服务器之间移动。 UNC 路径将是 \server\c$... 和其他服务器上的相同。

我正在寻找可以执行此操作的脚本或软件。我知道我可以使用 PowerShell 或 robocopy,但我想要一些可以监控位置的东西,如果文件显示它会移动它。

一旦检测到文件,我还需要延迟文件移动 - 如'哦,那里有一个文件等待 5 秒 移动文件 '。

最好的方法是什么?

编辑:通过从 Drew 提供的 PowerShell 脚本创建一个 .exe 并使用 PS EXE 应用程序并使用 NSSM 从中创建服务来设法对此进行排序。

【问题讨论】:

  • 为什么不使用Robocopy 中的/MOT: 选项?
  • @Squashman 我无法找到 Robocopy 在移动文件之前是否会出现延迟,以及是否可以设置它以便不必一直在屏幕上打开 cmd 窗口。我更倾向于使用 powershell,因为我使用的比 Robocopy 和 .bat 脚本更多......
  • 是的。 ROBOCOPY 的帮助文件相当令人生畏。我承认我自己已经浏览了它的一些选项,后来从一位同事那里发现它可以做一些我不知道它可以做的事情。

标签: powershell batch-file file-transfer


【解决方案1】:

首先,请尝试下一次自己创建一些代码。即使是一些Get-ChildItem while 循环。

这将监视文件夹位置 $watcher.path 是否有任何新的 "Created" 事件以及事件发生后大约 5 秒。我不确定我是从哪里偷来的,但它已经派上用场了很长时间了。

它只会监视新事件而不是以前的事件。因此,如果文件夹中有一些文件,它只会根据您的操作对新创建/修改的文件运行操作。

# Set folder and files to watch and misc flags
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Source\Location"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true  

# Define actions to be taken when an event is detected
$action = {
    $path = $Event.SourceEventArgs.FullPath
    $Last = 1
    $Current = (Get-Item $path).length
    while ($Current -ne $Last) {
        $Last = $Current
        Start-Sleep -Seconds 1
        $Current = (Get-Item $path).length
    }
    # Change x if you want to increase the time before the move
    #sleep x
    Move-Item -Path $path -Destination "C:\Destination\Location"
}

# Decide which events to watch
# Changed, Created, Deleted, Renamed events.
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多