2013-10-12 132 views
0

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

ls -n >test.txt 

使输出文件中的文件名的文件扩展名脱离。当我在Powershell控制台内使用ls -n(无输出重定向)时,文件扩展名位于输出中。

有谁知道这个问题是什么或如何正确使用Powershell?

回答

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输出工作等

+0

感谢您的回复,裂变。我意识到它实际上是一个文本编辑器,它出于某种原因错误地显示了文件内容(我从来没有遇到过问题)。我觉得那很愚蠢。 – ratnapper

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