【问题标题】:Powershell 2.0 out-file formatting nightmarePowershell 2.0 输出文件格式的噩梦
【发布时间】: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


    【解决方案1】:

    一定要准确吗?为什么?俗话说,如果你在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。

    【讨论】:

    • 是的,它必须与其他工具的输入完全相同。输出文件截断到屏幕缓冲区宽度
    • 有趣。原生 > 重定向有同样的问题吗?
    【解决方案2】:

    有很多方法可以将信息写入文件。一种是Set-Content,不存在宽度问题。此外,将 FileInfo 对象转换为字符串会产生 FullName。

    dir * -r | ?{!$_.PSIsCcontainer} | Set-Content C:\files.txt
    

    Out-File 出现问题的原因是所有 Out-* cmdlet 都使用自动格式化视图。这些视图是在考虑控制台的情况下创建的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2020-03-14
      • 2010-11-13
      • 2010-12-22
      相关资源
      最近更新 更多