Powershell将文件移动到仍未写入源文件夹的新文件夹

时间:2017-11-02 15:58:05

标签: powershell

我有一个powershell脚本,每15分钟将文件从源目录移动到目标目录。大约1兆字节的文件正由SFTP服务器移动到源目录中......因此SFTP客户端可以随时写入文件。

Move-Item命令正在移动文件,但似乎它正在移动它们而不确定文件是否仍在被写入(正在使用?)。

我需要一些帮助,想方法将文件从源写入目标并确保整个文件到达目标。有人在使用Powershell之前遇到过这个问题?

我搜索并找到了一些功能,表示他们已经解决了问题,但是当我尝试它们时,我没有看到相同的结果。

现有的PowerShell脚本如下:

Move-Item "E:\SFTP_Server\UserFolder\*.*" "H:\TargetFolder\" -Verbose -Force *>&1 | Out-File -FilePath E:\Powershell_Scripts\LOGS\MoveFilesToTarget-$(get-date -f yyyy-MM-dd-HH-mm-ss).txt

1 个答案:

答案 0 :(得分:0)

我最后拼凑了一些东西,让它按照我的意愿运作。基本上我循环遍历文件并检查文件的长度...然后等待一秒钟并再次检查文件的长度以查看它是否已更改。这似乎运作良好。这是脚本的副本,它可以帮助将来的任何人!

$logfile ="H:\WriteTest\LogFile_$(get-date -format `"yyyyMMdd_hhmmsstt`").txt"

function log($string, $color)
{
if ($Color -eq $null) {$color = "white"}
write-host $string -foregroundcolor $color
$string | out-file -Filepath $logfile -append
}

$SourcePath = "E:\SFTP_Server\UserFolder\"
$TargetPath = "H:\TargetFolder\"
$Stuff = Get-ChildItem "$SourcePath\*.*" | select name, fullname


ForEach($I in $Stuff){
log "Starting to process $I.name" green

$newfile = $TargetPath + $I.name

$LastLength = 1
$NewLength = (Get-Item $I.fullname).length

while ($NewLength -ne $LastLength) {
    $LastLength = $NewLength
    Start-Sleep -Seconds 1
    log "Waiting 1 Second" green
    $NewLength = (Get-Item $I.fullname).length
    log "Current File Length = $NewLength" green
}
log "File Not In Use - Ready To Move!" green
Move-Item $I.fullname $TargetPath


}