我在Powershell伊势脚本和防止盗版脚本的一部分需要找到文件名,如果它存在于计算机上的脚本将无法工作。这将工作,因为下载一个文件两次会给予它一点(1)。我已经谷歌各种各样的问题,但我只是真的想找出文件路径的文件位于下载。
6yt4nkrj1#
"$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本机 * 方式向系统询问已知文件夹位置。
虽然PowerShell对. NET框架的访问几乎是不受限制的,因此可以使用System.Environment类型的.GetFolderPath()方法来请求特殊的已知文件夹,但令人惊讶的是,指定的下载文件夹不在其中。
System.Environment
.GetFolderPath()
在PowerShell中,您可以通过Shell.Application COM服务器访问它:
Shell.Application
有关所有支持的(前缀为shell:)文件夹标识符的列表,请参见this article。[1]"天真"的意思是:一个解决方案,一个是 * 可以理解的诱惑 * 使用,但它并不适用于 * 所有 * 情况。
shell:
plupiseo2#
$downloadsFolder = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders").PSObject.Properties["{374DE290-123F-4565-9164-39C4925E467B}"].Value
zkure5ic3#
这应该与操作系统无关。在非Windows系统上,没有ComObject支持。
$path = Join-Path -Path "$([System.Environment]::GetFolderPath(40))" -ChildPath "Downloads"
请注意,文件夹“Downloads”依赖于语言。.NET没有跨平台调用来检测这一点。
woobm2wo4#
嗯... C:/用户/* 此处输入您的姓名 */下载将您注册计算机时使用的名称作为 * 您的姓名输入此处 *
4条答案
按热度按时间6yt4nkrj1#
**天真 [1]的答案, 通常 * 但 * 不总是 * 有效:
*可靠答案:
"$HOME\Downloads"
假设了两件事,但这两件事并不一定是真的:$HOME
(相当于环境变量USERPROFILE
($env:USERPROFILE
))是用户 * documents * 的根目录,这一点并不总是正确的,也就是说,对于 * roaming配置文件 * 来说并非如此--只有"${env:HOMEDRIVE}${env:HOMEPATH}"
才能可靠地反映documents文件夹。从PowerShell Core 7.0.0-preview.3开始,PowerShell没有 * PowerShell本机 * 方式向系统询问已知文件夹位置。
虽然PowerShell对. NET框架的访问几乎是不受限制的,因此可以使用
System.Environment
类型的.GetFolderPath()
方法来请求特殊的已知文件夹,但令人惊讶的是,指定的下载文件夹不在其中。在PowerShell中,您可以通过
Shell.Application
COM服务器访问它:有关所有支持的(前缀为
shell:
)文件夹标识符的列表,请参见this article。[1]"天真"的意思是:一个解决方案,一个是 * 可以理解的诱惑 * 使用,但它并不适用于 * 所有 * 情况。
plupiseo2#
$downloadsFolder = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders").PSObject.Properties["{374DE290-123F-4565-9164-39C4925E467B}"].Value
zkure5ic3#
这应该与操作系统无关。在非Windows系统上,没有ComObject支持。
请注意,文件夹“Downloads”依赖于语言。.NET没有跨平台调用来检测这一点。
woobm2wo4#
嗯... C:/用户/* 此处输入您的姓名 */下载
将您注册计算机时使用的名称作为 * 您的姓名输入此处 *