2011-09-30 63 views
5

我試圖做到以下幾點:如何在PowerShell中獲取字符串而不是數組?

$files = Get-ChildItem c:\temp | Select-Object Name 
foreach ($i in $files) { 
    Write-Host "Filename is $i" 
} 

樣品結果:

Filename is @{Name=oracle10204.rsp} 
Filename is @{Name=powershell.txt} 

我怎麼只有以下?

Filename is oracle10204.rsp 
Filename is powershell.txt 

回答

4

下面是從您的示例中獲取名稱的答案。用$()包圍$ i並引用.Name屬性。 $()將導致它評估表達式。

$files = Get-ChildItem c:\temp | Select-Object Name 
foreach ($i in $files) { 
    Write-Host "Filename is $($i.Name)" 
} 
5

我不知道你爲什麼在這裏使用Select-Object,但我只是做:

Get-ChildItem c:\temp | % {Write-Host "Filename is $($_.name)"} 

該管道獲得-ChildItem的輸出到的foreach對象(簡稱%),其爲管道中的每個對象運行命令。

$_是通用管道對象變量。

+0

謝謝,你的例子有效,但如何讓我的foreach語句給出正確的結果? – jrara

+0

@jrara - 我是說不要使用你的foreach語句,因爲這是一樣的事情,但更有效的方法。流水線是PowerShell設計的。 – JNK

+0

嗯,是的,但我想學習PowerShell,我想知道我的foreach循環出了什麼問題。我知道還有很多其他的方法可以做到這一點。 – jrara

5

隨着雜牌交換機就可以得到唯一對象名稱:

Get-ChildItem c:\temp -Name 
5

如果你是堅定的關於讓你的原來的嘗試工作,嘗試與

更換

Select-Object Name 

Select-Object -ExpandProperty Name 
0

你可以得到此對象與Get-ChildItem -Name參數字符串:

$variable = Get-ChildItem C:\temp -Name 

這給你一個:

System.String
如果使用名稱參數,則Get-ChildItem返回對象名稱作爲字符串。

你可以在Get-ChildItem中查看。

相關問題