Powershell 不断在两个位置之间移动文件

Powershell 不断在两个位置之间移动文件,powershell,batch-file,file-transfer,Powershell,Batch File,File Transfer,我有几个文件需要通过网络在两台服务器之间移动。UNC路径将是\server\c$。。。在另一台服务器上也是如此 我正在寻找一个脚本或一个软件,可以做到这一点。我知道我可以使用PowerShell或robocopy,但我希望能够监视位置,如果文件出现,它会移动它 一旦检测到文件,我还需要对文件移动进行延迟,如“哦,有一个文件在那里等待5秒移动文件” 这样做的最佳方式是什么 编辑:通过使用PS exe应用程序从Drew提供的PowerShell脚本创建.exe并使用NSSM从中创建服务来对其进行排序

我有几个文件需要通过网络在两台服务器之间移动。UNC路径将是\server\c$。。。在另一台服务器上也是如此

我正在寻找一个脚本或一个软件,可以做到这一点。我知道我可以使用PowerShell或robocopy,但我希望能够监视位置,如果文件出现,它会移动它

一旦检测到文件,我还需要对文件移动进行延迟,如“哦,有一个文件在那里等待5秒移动文件”

这样做的最佳方式是什么


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

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

这将监视文件夹位置$watcher.path中任何新创建的事件,大约在事件发生后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}

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