2013-10-12 81 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