2015-02-11 65 views
1

我經常想要做的事,如:Powershell的文件和目錄名字符串,SANS裝飾

$foo=ls foo.txt|select FullName 
$bar=$foo.split("\\"); # or replace or some such 

但是如果我現在看在酒吧的字符串,就像這樣:

@{FullName=C:\path\to\foo.txt} 

因爲我知道裝飾品有多久了,所以我可以手動獲取子字符串。但是這似乎很詭異 - 是否有一種方法可以將路徑部分作爲字符串?

編輯:說明另一個類似的問題,根據一些問題,如果我這樣做:

$foo -replace("\\","/") 

我得到:

@{FullName=C:/src/tss/THSS-Deployment-Config/foo.txt} 

我做很多這樣的文件名的操作的一個不同CM庫之間的遷移。我在想'如果我可以把整個路徑作爲一個字符串'...

這是我第一次進入PS的嚴重郊遊。所以也許我的想法是錯誤的。

+1

您正在將對象視爲一個字符串,在您的情況下不起作用。這是'select -ExpandProperty FullName'和'(gci foo.txt).fullname'的關鍵。你試圖操作的是一個帶有全名屬性的對象,這就是爲什麼你會看到哈希表符號。 – Matt 2015-02-11 18:47:20

回答

4

幾個簡單的方式,全部採用Split-Path cmdlet的是爲這個完美的:

$foo= ls foo.txt | select FullName 
$bar = Split-Path $foo.fullname 

或者:

$foo= ls foo.txt | select -ExpandProperty FullName 
$bar = Split-Path $foo 

或者更短:

$bar = Split-Path (gci foo.txt).fullname 
0

@ arco444給了我失蹤的一塊。爲了獲得與文件名作爲參數的完整路徑,我能想出的最簡單的事情是:

$bar=(Split-Path $foo.FullName) +"\"+ (Split-Path $foo -leaf) 

我不知道是否有合併得到整個路徑作爲一個字符串的簡單方法。

+0

像這樣:'$ bar =(gci foo.txt).fullname'。我以爲你只想要目錄部分。 – arco444 2015-02-11 15:29:20

+0

我會假設這是一個例子,而不是你的真實代碼,但是我不理解你的目的,因爲你只是再次輸出完整名稱。如果你需要分解它們,你可以使用'directoryName'和'Name'。這會做同樣的事情'$ bar =「{0} \ {1}」-f $ foo.DirectoryName,$ foo.Name' – Matt 2015-02-11 15:29:23

+0

@Matt如果你對字符串做一個FullName對象的操作, {FullName = ...裝飾品。我正在用這些文件名處理很多東西,如果它們是純文本字符串,那麼這樣做會更容易。我會添加另一個更清晰的例子。 – 2015-02-11 17:53:48

相關問題