我目前正在编写一个小脚本/程序,它将识别和排序 Windows 目录中的某些文件。我正在使用 ls -n 命令输出文件列表,供 Windows 的 grep 使用。但是,使用以下命令:
ls -n >test.txt
在输出文件中省略文件名的文件扩展名。当我在 Powershell 控制台中使用 ls -n 时(无输出重定向),文件扩展名在输出中。
有谁知道问题是什么或如何使用 Powershell 正确执行此操作?
我目前正在编写一个小脚本/程序,它将识别和排序 Windows 目录中的某些文件。我正在使用 ls -n 命令输出文件列表,供 Windows 的 grep 使用。但是,使用以下命令:
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 中对其进行 grepping 不是很“惯用”。这有点与 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 而不是 grep,将其完全保留在 PowerShell 中。
Get-ChildItem |
where-object (!$_.PSIsContainer}|
select-string PATTERN