2014-02-22 110 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)”',你将得到逗号分隔的名字。 –