2016-08-15 123 views
0

我最近在Windows 10系統上開始使用Powershell。我創建了一個配置文件,並且我想放入一個鏈接到我的文檔部分中的文件夾的變量。但是,我不想對路徑進行硬編碼,因爲我知道如果我的配置文件名稱在硬盤傳輸過程中發生變化,我就需要進入並重新編寫它,就像我上次發送它時一樣維修。所以我的第一個想法是把這樣的東西:Resolve-Path cmdlet究竟做了什麼?

$Var = $(~\Documents\Folder) 

但是,吐出一個錯誤。然後我瞭解了Resolve-Path Cmdlet,一眼就可以看到我需要的東西。但是,我這樣做的時候:

$Var = $(Resolve-Path ~\Documents\Folder) 

...我得到這樣的:

>$Var 

Path 
---- 
C:\Users\Username\Documents\Folder 

> 

這似乎是一個問題。但是,當我嘗試cd $Var時,它成功運行,這讓我很困惑。我認爲結果中無關的Path標題會導致錯誤。

究竟是什麼Resolve-Path,爲什麼它仍然得到正確解釋時,傳遞到cd?另外,有沒有辦法讓Resolve-Path不是包含無關信息並只返回擴展路徑?

回答

2

原因你看到的頭Path是因爲Resolve-Path將返回System.Management.Automation.PathInfo類型的對象,並且當該不捕捉到一個變量它被輸出作爲一個字符串到控制檯以可讀格式IE:

ObjProperty1  ObjProperty2  ObjProperty3 ... 
---------   ---------   ---------  ... 
Value1   Value2   Value3  ... 

該對象與cd一起使用,因爲PowerShell足夠智能,可以在運行cd之前解析對象($var)。 PowerShell將返回路徑屬性的值爲cd意味着cd將看到一個字符串"C:\Users\Username\Documents\Folder"而不是對象標題。

如果你只想返回無頭的路徑使用Select小命令的參數-ExpandProperty

$var = Resolve-Path '~\Documents\Folder' | select -ExpandProperty Path 

如果你想在Resolve-Path MSDN是開始(link)的好地方更多的信息。

+0

謝謝!我一定錯過了返回類型,否則我會更深入地考慮它。選擇'只是說'().Path'就像另一個答案所說的那樣有什麼特別的優勢嗎? – BHustus

+0

@Bustus不,使用ether之後沒有任何優勢,因爲它們最終都會調用相同的檢索命令。 – Richard

0

簡單的例子爲解決路徑工作,

比方說,你不知道你的計算機的Office版本,並希望得到正確的路徑,Resolve-Path可以幫助...

$TestPath = 'C:\Program Files (x86)\Microsoft Office\*\Winword.exe' 
$Path = (Resolve-Path $TestPath).Path 
+0

我不想知道'Resolve-Path'是用來做什麼的 - 我已經知道了。我想知道爲什麼它表現得很奇怪。但是,感謝給我一個選項,只存儲路徑。 – BHustus