windows - Where is the "downloads" folder located
问题描述
I'm making a script in Powershell ISE and to prevent piracy a part of the script needs to locates the file name and if it exists on the computer the script won't work. This will work cause downloading a file twice will give it a little (1).
I've google all kind of questions but I just really want to figure out the file path to a file located in downloads.
解决方案
tl;博士
- 天真的[1]答案,通常但并非总是有效:
"$HOME\Downloads"
- 强有力的答案:
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
"$HOME\Downloads"
假设两件事,这不一定是真的:
$HOME
等效于环境变量USERPROFILE
( ) 的用户文档$env:USERPROFILE
的根目录并不总是正确的,即不具有漫游配置文件- 仅可靠地反映文档文件夹。"${env:HOMEDRIVE}${env:HOMEPATH}"
更重要的是,下载文件夹可能已被明确配置为位于任意位置,与文档位置无关
确定下载文件夹位置的唯一可靠方法是向系统询问它:
从 PowerShell Core 7.0.0-preview.3 开始,PowerShell 没有向系统询问已知文件夹位置的PowerShell 原生方式。
- 然而,在 GitHub 上已经提议添加这样的功能。
虽然 PowerShell 几乎可以无限制地访问 .NET 框架,因此可以使用该System.Environment
类型的.GetFolderPath()
方法来请求特殊的已知文件夹,但令人惊讶的是,指定的下载文件夹并不在其中。
只有 WinAPI 的Known Folders API允许以稳健的方式检索指定的下载文件夹,而不依赖于与其他已知文件夹的固定关系:
在 PowerShell 中,您可以通过Shell.Application
COM 服务器访问它:
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
有关所有受支持的 ( shell:
-prefixed) 文件夹标识符的列表,请参阅本文。
[1]天真的我的意思是:一种可以理解的尝试使用的解决方案,但它并不适用于所有情况。
推荐阅读
- c - 不接受输入第二次进入不采用 emp 2 名称的 c
- json - 无法显示 boxAndWhisker canvasJS
- ubuntu - Apache solr 没有在 macos catalina 上监听 8983
- reactjs - 从 assets>movies>Image.png 导入图像到 React 中的新模块
- java - 无法在 Eclipse 中建立到 Oracle DBMS 的 JDBC 连接
- reactjs - 我该如何测试这个?
- c# - 另一个“对象未设置为对象的实例”错误
- reactjs - 与 setInterval() 结合使用 React 钩子状态更新中的奇怪行为
- neural-network - 如何创建对象检测模型
- javascript - 如何使用 Javascript 检测是否从 CloudFront 提供缓存版本?