我正在 Powershell ISE 中制作脚本,为了防止盗版,脚本的一部分需要定位文件名,如果它存在于计算机上,脚本将无法运行。这将起作用,因为下载文件两次会给它一点点 (1)。
我用谷歌搜索了各种问题,但我真的很想找出下载文件的文件路径。
最佳答案
tl;dr
- 天真[1] 答案,通常但不总是作品:
"$HOME\Downloads"
- 可靠的答案:
(New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
"$HOME\Downloads"
假定两件事,不一定为真:
$HOME
,相当于环境变量USERPROFILE
($env:USERPROFILE
),是根目录用户的文档并不总是正确的,即不是漫游配置文件 - 只有“${env:HOMEDRIVE}${env:HOMEPATH}”
可靠地反射(reflect)文档文件夹。更重要的是,下载文件夹可能是explicitly configured to be in an arbitrary location , 与文档位置无关
确定下载文件夹位置的唯一可靠方法是询问系统:
从 PowerShell Core 7.0.0-preview.3 开始,PowerShell 没有PowerShell-native方法来询问系统已知的文件夹位置。
- 添加这样的功能已 proposed on 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:
-前缀)文件夹标识符的列表,请参阅 this article .
[1] 天真 我的意思是:一种解决方案,人们可以理解地想使用它,但在所有 情况。
关于windows - "downloads"文件夹在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947150/