Powershell:输出重定向问题

时间:2013-10-12 05:43:22

标签: powershell

我目前正在编写一个小脚本/程序,用于识别和排序Windows目录中的某些文件。我使用ls -n命令输出一个文件列表,稍后由grep for Windows使用。但是,使用以下命令:

ls -n >test.txt

从输出文件中删除文件名的文件扩展名。当我在Powershell控制台中使用ls -n(没有输出重定向)时,文件扩展名在输出中。

有没有人知道问题是什么或如何使用Powershell正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

这对我来说很好用:

PS C:\Users\fission\Desktop\test> dir


    Directory: C:\Users\fission\Desktop\test


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2011-06-19   3:22 PM       1250 capture.pcap
-a---        2013-09-26   5:21 PM     154205 fail.pml
-a---        2013-09-25  12:53 PM    1676383 hashfxn.exe


PS C:\Users\fission\Desktop\test> ls -n >test.txt
PS C:\Users\fission\Desktop\test> type test.txt
capture.pcap
fail.pml
hashfxn.exe
test.txt

如您所见,test.txt包含其他文件的扩展名。


但我可以提一个建议吗?将文本输出管道输出到文件,然后在PowerShell中将其称为“惯用”。这与PowerShell的中心主题有点相反:一个应该传递对象,而不是文本。您可以考虑直接使用Get-ChildItem的输出,例如将其存储在变量中,或将其传递给Select-Object等。

答案 1 :(得分:0)

不要在脚本中使用别名,因为你不能依赖它们在任何地方都设置相同。

这将为您提供当前目录中所有文件(没有目录)的列表,按字母顺序排序,并将其写入test.txt

Get-ChildItem |
    where-object (!$_.PSIsContainer}|
    select-object -expandproperty Name|
    sort-object | out-file test.txt

如果您在这些文件中搜索字符串,可以使用select-string而不是grep,将其完全保存在PowerShell中。

Get-ChildItem |
    where-object (!$_.PSIsContainer}|
    select-string PATTERN