我目前正在编写一个小脚本/程序,用于识别和排序Windows目录中的某些文件。我使用ls -n命令输出一个文件列表,稍后由grep for Windows使用。但是,使用以下命令:
ls -n >test.txt
从输出文件中删除文件名的文件扩展名。当我在Powershell控制台中使用ls -n(没有输出重定向)时,文件扩展名在输出中。
有没有人知道问题是什么或如何使用Powershell正确地做到这一点?
答案 0 :(得分: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
等。
答案 1 :(得分: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