我目前正在编写一个小脚本/程序来识别和排序Windows目录中的某些文件。我正在使用ls -n命令来输出文件列表,以便稍后由grep for Windows使用。但是,使用以下命令:Powershell:输出重定向问题
ls -n >test.txt
使输出文件中的文件名的文件扩展名脱离。当我在Powershell控制台内使用ls -n(无输出重定向)时,文件扩展名位于输出中。
有谁知道这个问题是什么或如何正确使用Powershell?
我目前正在编写一个小脚本/程序来识别和排序Windows目录中的某些文件。我正在使用ls -n命令来输出文件列表,以便稍后由grep for Windows使用。但是,使用以下命令:Powershell:输出重定向问题
ls -n >test.txt
使输出文件中的文件名的文件扩展名脱离。当我在Powershell控制台内使用ls -n(无输出重定向)时,文件扩展名位于输出中。
有谁知道这个问题是什么或如何正确使用Powershell?
也能正常工作对我来说:
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
输出工作等
不要在脚本中使用别名,因为你不能依赖他们所设定的无处不在。
这将获得当前目录中所有文件(并且没有目录)的列表,按字母顺序对其进行排序,并将其写入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
感谢您的回复,裂变。我意识到它实际上是一个文本编辑器,它出于某种原因错误地显示了文件内容(我从来没有遇到过问题)。我觉得那很愚蠢。 – ratnapper