2014-02-22 143 views
0

在UNIX殼,像一個命令:PowerShell可以擴展文件名嗎?

echo *.txt 

打印:

1.txt 2.txt 3.txt 

因爲殼對所述*.txt ARG文件名擴展。是否有可能實現與Powershell相同的結果?嘗試:

echo *.txt 

結果只是:

*.txt 

當然,迴音僅僅是一個愚蠢的例子。在實踐中,我想將所有* .txt文件傳遞給一個不執行文件名擴展的外部命令。

UPDATE

對於我而言,這是最好看,即使它不是很優雅:

D:\cygwin\bin\echo.exe $(dir *.txt) 

我用cygwin的回聲在這裏進行測試,因爲PowerShell的回聲小命令將格式化文件,對象。

回答

4

你可以做那樣的事情。這個命令並不像bash那麼簡潔,但這個想法是一樣的。嘗試是這樣的:

Get-ChildItem -Filter "*.txt" 

或者

Get-ChildItem | Where-Object {$_.Extension -eq ".txt"} 

<#Same command as above#> 
Get-ChildItem | ? {$_.Extension -eq ".txt"} 

或(如基思·希爾指出的),如果你真的需要他們都在同一行:

"$(Get-ChildItem *.txt -Name)" 
+0

我會去' Get-ChildItem * .txt -name'或使用別名'ls * .txt -name'。如果你想要在同一行上的文件名,那麼'「$(ls * .ps1 -name)」'。 –

+0

@KeithHill,我補充說。我通常不是使用PS別名的粉絲。 – SomeShinyObject

+0

不要忘記該語句的雙引號。這是從子表達式返回的數組中創建一個字符串的重要位。默認分隔符是空格,但您可以使用'$ OFS'變量來更改它。設置'$ OFS =',''然後運行'「$(Get-ChildItem * .txt -Name)」',你將得到逗號分隔的名字。 –