我最近开始在我的 Windows 10 系统上使用 Powershell。我创建了一个配置文件,我想放入一个变量,该变量链接到我的文档部分中的文件夹。但是,我不想对路径进行硬编码,因为我知道如果我的配置文件名称在硬盘驱动器传输中发生更改,就像我上次发送它时所做的那样,我需要进入并重新编写它维修。所以我的第一个想法是放入这样的东西:
$Var = $(~\Documents\Folder)
Run Code Online (Sandbox Code Playgroud)
但这吐了一个错误。然后我了解了 Resolve-Path Cmdlet,它一眼看上去就是我所需要的。但是,当我这样做时:
$Var = $(Resolve-Path ~\Documents\Folder)
Run Code Online (Sandbox Code Playgroud)
... 我懂了:
>$Var
Path
----
C:\Users\Username\Documents\Folder
>
Run Code Online (Sandbox Code Playgroud)
这似乎是一个问题。但是,当我尝试时cd $Var,它成功了,这让我非常困惑。我认为结果中的无关Path标头会导致错误。
究竟做了Resolve-Path 什么,为什么它在传入时仍然被正确解释cd?另外,有没有办法让Resolve-Path 不包含无关信息并只返回扩展路径?
您看到标题的原因Path是因为Resolve-Path正在返回一个类型的对象,System.Management.Automation.PathInfo并且当它没有被捕获到变量中时,它会以可读格式 IE 的形式作为字符串输出到控制台:
ObjProperty1 ObjProperty2 ObjProperty3 ...
--------- --------- --------- ...
Value1 Value2 Value3 ...
Run Code Online (Sandbox Code Playgroud)
这个对象使用cd的PowerShell是足够聪明来解析对象($var)之前cd运行。PowerShell将返回 path 属性的值cd意味着cd将看到一个字符串"C:\Users\Username\Documents\Folder"而不是对象头。
如果您只想返回没有标题的路径,请使用Selectcmdlet 的-ExpandProperty参数:
$var = Resolve-Path '~\Documents\Folder' | select -ExpandProperty Path
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关Resolve-PathMSDN 的更多信息,这是一个很好的起点(链接)。
| 归档时间: |
|
| 查看次数: |
8526 次 |
| 最近记录: |