Powershell:用管道将多行字符串传递到resolve-path的-LiteralPath

时间:2019-08-02 09:14:02

标签: powershell escaping glob

使用Powershell,我想将一堆绝对路径转换为相对路径:

cmd /c dir /s /b /a-d | resolve-path -relative | sort-object

但是,目录中有许多有趣的字符使Resolve-Path误以为它们是通配符模式。

如何通过管道将它们传递到解析路径的-LiteralPath? 我读到它应该由ByPropertyName管道完成,并且该值应该放在输入对象的“ LiteralPath”属性中。

但是我不知道如何。网络上的文章使我感到困惑。

请帮助,非常感谢。

1 个答案:

答案 0 :(得分:3)

指定管道输入值应绑定到LiteralPath,如下所示:

cmd /c dir /s /b /a-d|Resolve-Path -LiteralPath {$_} -Relative

尽管,如果您只想遍历目录树,收集所有文件并解析它们的相对路径,请改用Get-ChildItem-内置cmdlet上的LiteralPath参数始终是别名{{ 1}},恰好是提供程序添加到所有驱动器项的属性的名称,从而使管道绑定自动工作:

PSPath