【发布时间】:2010-11-15 16:45:03
【问题描述】:
如何让 Powershell 输出与以下命令生成的文件相同的文件?
dir /s /b /a-d *.* > C:\files.txt
应该很容易吧?!!
编辑: 我发现 ps 正在根据屏幕缓冲区宽度截断输出。用 format-table 修复它并用空格填充...尝试 format-list 并获得属性标题...您明白了。
【问题讨论】:
标签: powershell cmd powershell-2.0
如何让 Powershell 输出与以下命令生成的文件相同的文件?
dir /s /b /a-d *.* > C:\files.txt
应该很容易吧?!!
编辑: 我发现 ps 正在根据屏幕缓冲区宽度截断输出。用 format-table 修复它并用空格填充...尝试 format-list 并获得属性标题...您明白了。
【问题讨论】:
标签: powershell cmd powershell-2.0
一定要准确吗?为什么?俗话说,如果你在Powershell中解析字符串,那你可能做错了什么……反正……
1) 只需调用 cmd.exe。
PS> cmd /c "dir /s /b /a-d *.* > c:\files.txt"
2) 我相信您可以从原生 Powershell 获得相同的结果。但我不能负责用 NTFS 连接、隐藏文件等测试每个边缘情况。
PS> gci -r | ?{ !$_.psiscontainer } | %{ $_.fullname } | out-file c:\files.txt
我个人讨厌您不能使用“选择”来检索 FullName 属性而不会对下游 cmdlet 产生奇怪的副作用。如果 foreach 循环的无意义让您和我一样困扰,请使用来自 PSCX 的 Get-PropertyValue 或来自 Josh Einstein 的 Linq-Select。
【讨论】:
有很多方法可以将信息写入文件。一种是Set-Content,不存在宽度问题。此外,将 FileInfo 对象转换为字符串会产生 FullName。
dir * -r | ?{!$_.PSIsCcontainer} | Set-Content C:\files.txt
Out-File 出现问题的原因是所有 Out-* cmdlet 都使用自动格式化视图。这些视图是在考虑控制台的情况下创建的。
【讨论】: