Powershell:将多行字符串通过管道传输到解析路径的 -LiteralPath

标签 powershell escaping glob

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

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

但是,目录中有许多有趣的字符,使 Resolve-Path 感到困惑,它认为它们是通配符模式。

如何将它们通过管道传输到resolve-path的-LiteralPath? 我读到它应该通过 ByPropertyName 管道完成,并且该值应该放入输入对象的“LiteralPath”属性。

但是我不知道怎么办。网络上的文章让我很困惑。

请帮忙,非常感谢。

最佳答案

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

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

尽管如此,如果您只想递归目录树,收集所有文件并解析它们的相对路径,请使用 Get-ChildItem 代替 - 内置的 LiteralPath 参数-in cmdlet 始终是别名 PSPath,它恰好是提供程序添加到所有驱动器项的属性的名称,使管道绑定(bind)自动工作:

Get-ChildItem -File -Recurse |Resolve-Path -Relative 
                                           # Explicit binding to LiteralPath no longer required

关于Powershell:将多行字符串通过管道传输到解析路径的 -LiteralPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323379/

相关文章:

mysql - 如何诊断 Entity Framework 迁移错误?

windows - 从文件中删除与模式匹配的所有行,但第一次出现的行除外

java - Play 框架中正确转义的指南

javascript - 通过未转义的数据属性选择元素

java - 如何在不使用通配符扩展的情况下将 * 传递给 java 程序?

windows - 对文件夹中的每个文件运行命令,然后保存输出

powershell - Powerpoint的禁用和自动恢复选项

mysql - 德尔福/MySql : Problems escaping strings

perl - Perl 中的 glob() 函数用于获取文件名

javascript - 在 JavaScript 中是否有类似 glob 但用于 URL 的东西?