windows 下载”文件夹位于何处

mbskvtky  于 2023-02-25  发布在  Windows
关注(0)|答案(4)|浏览(172)

我在Powershell伊势脚本和防止盗版脚本的一部分需要找到文件名,如果它存在于计算机上的脚本将无法工作。这将工作,因为下载一个文件两次会给予它一点(1)。
我已经谷歌各种各样的问题,但我只是真的想找出文件路径的文件位于下载。

6yt4nkrj

6yt4nkrj1#

    • TL;医生**
      **天真 [1]的答案 通常 * 但 * 不总是 * 有效:
"$HOME\Downloads"

*可靠答案

(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path

"$HOME\Downloads"假设了两件事,但这两件事并不一定是真的:

  • $HOME(相当于环境变量USERPROFILE$env:USERPROFILE))是用户 * documents * 的根目录,这一点并不总是正确的,也就是说,对于 * roaming配置文件 * 来说并非如此--只有"${env:HOMEDRIVE}${env:HOMEPATH}"才能可靠地反映documents文件夹。
  • 更重要的是,downloads文件夹可能是explicitly configured to be in an arbitrary location,与文档位置无关
    • 确定下载文件夹位置的唯一可靠方法是向 * 系统 * 询问:**

从PowerShell Core 7.0.0-preview.3开始,PowerShell没有 * PowerShell本机 * 方式向系统询问已知文件夹位置。

虽然PowerShell对. NET框架的访问几乎是不受限制的,因此可以使用System.Environment类型的.GetFolderPath()方法来请求特殊的已知文件夹,但令人惊讶的是,指定的下载文件夹不在其中。

    • 只有WinAPI的Known Folders API允许以可靠的方式检索指定的下载文件夹**,而不依赖于与其他已知文件夹的固定关系:

在PowerShell中,您可以通过Shell.Application COM服务器访问它:

(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path

有关所有支持的(前缀为shell:)文件夹标识符的列表,请参见this article
[1]"天真"的意思是:一个解决方案,一个是 * 可以理解的诱惑 * 使用,但它并不适用于 * 所有 * 情况。

plupiseo

plupiseo2#

$downloadsFolder = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders").PSObject.Properties["{374DE290-123F-4565-9164-39C4925E467B}"].Value

zkure5ic

zkure5ic3#

这应该与操作系统无关。在非Windows系统上,没有ComObject支持。

$path =  Join-Path -Path "$([System.Environment]::GetFolderPath(40))" -ChildPath "Downloads"

请注意,文件夹“Downloads”依赖于语言。.NET没有跨平台调用来检测这一点。

woobm2wo

woobm2wo4#

嗯... C:/用户/* 此处输入您的姓名 */下载
将您注册计算机时使用的名称作为 * 您的姓名输入此处 *

相关问题