Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何确定文件或目录是否正在使用?_Powershell_Powershell 4.0 - Fatal编程技术网

Powershell 如何确定文件或目录是否正在使用?

Powershell 如何确定文件或目录是否正在使用?,powershell,powershell-4.0,Powershell,Powershell 4.0,我正在编写一个脚本,用于监视下载文件夹中已完成的项目,并在找到时开始处理该项目 我当前的检测方法尝试重命名子目录,如果成功,它将假定已完成。对于单个文件,它会尝试将文件移动到名为\filename\filename.ext的子目录中,如果成功,则假定已完成。这将与已知临时文件的列表一起显示 虽然此方法可能准确地判断文件/dir是否确实在使用中,但对于某些浏览器或下载程序来说,它可能无法在等待恢复时锁定文件。只有在xx天之前才检查日期和进程的版本并不理想,因为所有下载都会延迟 有人有更好的主意吗

我正在编写一个脚本,用于监视
下载
文件夹中已完成的项目,并在找到时开始处理该项目

我当前的检测方法尝试重命名子目录,如果成功,它将假定已完成。对于单个文件,它会尝试将文件移动到名为
\filename\filename.ext
的子目录中,如果成功,则假定已完成。这将与已知临时文件的列表一起显示

虽然此方法可能准确地判断文件/dir是否确实在使用中,但对于某些浏览器或下载程序来说,它可能无法在等待恢复时锁定文件。只有在
xx
天之前才检查日期和进程的版本并不理想,因为所有下载都会延迟

有人有更好的主意吗

建议您可以打开一个文件进行写入,查看它是否已锁定:

$file = "\\xxxx\xxxxx\xxxxxxxx\test.log"
try { [IO.File]::OpenWrite($file).close();exit 0 } catch { exit 999}
我没有注意到浏览器会将文件解锁,但我看到他们在下载完成之前会选择另一个名称(*.part或*.partial)。可能值得使用逻辑来检查文件扩展名,直到文件扩展名不是。部分:


至于这个--“我正在编写一个脚本,监控下载文件夹中已完成的项目,当找到该项目时,它将开始处理该项目。”--你不是在说,而是在展示你是如何做到这一点的,这可能是所有这些额外工作的根本原因。您是使用自己的自定义代码,还是使用Bits传输模块/cmdlet?位具有指示完成的参数。-Get命令名“bits”浏览器不会在下载时锁定文件。文件的有效性/序列化程度不足以被任何东西打开,当然,浏览器不会在下载完成后测试下载。。大多数下载都是在下载过程中创建一个临时文件,然后根据请求下载的方式获取文件名。下载失败或因任何原因损坏时会发生什么情况?
Push-Location 
do{
  Sleep 1
}while((Get-ChildItem (join-path $env:USERPROFILE 'Downloads\*.part*')).Length -gt 0)