0

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

ls -n >test.txt

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

有谁知道问题是什么或如何使用 Powershell 正确执行此操作?

4

2 回答 2

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 中对其进行 grepping 不是很“惯用”。这有点与 PowerShell 的中心主题背道而驰:应该传递对象,而不是文本。您可能会考虑Get-ChildItem直接使用 的输出,例如将其存储在变量中,或将其通过管道传输到Select-Object等。

于 2013-10-12T06:22:35.467 回答
0

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

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

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

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

Get-ChildItem |
    where-object (!$_.PSIsContainer}|
    select-string PATTERN
于 2013-10-12T12:36:27.983 回答