我正在研究一个脚本,该脚本监视downloads
文件夹中已完成的项目,并在发现该脚本后开始对该项目进行处理。
我当前的检测方法尝试重命名子目录,如果成功,则假定已完成。对于单个文件,它将尝试将文件移动到名为\filename\filename.ext
的子目录中,如果成功则假定已完成。这连同已知的临时文件列表。
尽管此方法在确实使用文件/目录时可能是准确的,但对于某些在等待恢复时未锁定文件的浏览器或下载器来说,此方法可能效果不佳。该版本还会检查日期并仅在xx
天不理想的情况下进行处理,因为所有下载都会延迟,因此该版本不理想。
有人有更好的主意吗?
答案 0 :(得分:1)
This post建议您打开一个文件进行写入以查看其是否被锁定:
$file = "\\xxxx\xxxxx\xxxxxxxx\test.log"
try { [IO.File]::OpenWrite($file).close();exit 0 } catch { exit 999}
我没有注意到浏览器将文件解锁,但是我看到他们选择了另一个名称(* .part或* .partial),直到下载完成。可能值得使用逻辑来检查文件扩展名,直到 .part 以外的其他内容:
Push-Location
do{
Sleep 1
}while((Get-ChildItem (join-path $env:USERPROFILE 'Downloads\*.part*')).Length -gt 0)