“下载”文件夹位于何处

Ale*_*eks 6 windows powershell filepath

我正在 Powershell ISE 中制作一个脚本,为了防止盗版,脚本的一部分需要定位文件名,如果它存在于计算机上,脚本将无法工作。这会起作用,因为下载一个文件两次会给它一点点 (1)。

我已经用谷歌搜索了各种问题,但我真的很想弄清楚位于下载中的文件的文件路径。

mkl*_*nt0 17

tl;博士

  • 天真[1]的答案,这通常并不总是工作:
"$HOME\Downloads"
Run Code Online (Sandbox Code Playgroud)
  • 强大的答案
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
Run Code Online (Sandbox Code Playgroud)

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

  • 也就是说$HOME,这相当于环境变量USERPROFILE$env:USERPROFILE),是为用户的根目录下的文件并不总是正确的,即不与漫游配置文件-只有"${env:HOMEDRIVE}${env:HOMEPATH}"真实地反映出该文件夹。

  • 更重要的是,下载文件夹可能已被明确配置为位于任意位置,与文档位置无关

确定下载文件夹位置的唯一可靠方法是向系统询问:

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

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

只有 WinAPI 的已知文件夹 API允许以稳健的方式检索指定的下载文件夹,而无需依赖与其他已知文件夹的固定关系:

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

"$HOME\Downloads"
Run Code Online (Sandbox Code Playgroud)

有关所有受支持(-shell:前缀)文件夹标识符的列表,请参阅此文章


[1]天真的我的意思是:可以理解地想要使用一种解决方案,但它并不适用于所有情况。


小智 -13

嗯... C:/Users/你的名字/Downloads

在此输入您注册计算机时使用的名称作为您的姓名

  • 下载文件夹不会_始终_位于此位置 - 它们可以通过注册表重定向:“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders” (5认同)