Using Powershell, I want to convert a bunch of absolute paths to relative paths:
cmd /c dir /s /b /a-d | resolve-path -relative | sort-object
However, there are many funny characters in the directories that confuses Resolve-Path that it thought they were wildcard patterns.
How to pipe them to resolve-path's -LiteralPath
?
I read that it should be done by ByPropertyName piping and that the value should be put to the "LiteralPath" property of the input object.
But I don't know how. The articles on the web confuse the hell out of me.
Please help and many thanks.
Specify that the pipeline input value should be bound to LiteralPath
instead, like this:
cmd /c dir /s /b /a-d|Resolve-Path -LiteralPath {$_} -Relative
Although, if you just want to recurse through the directory tree, gather all files and resolve their relative path, use Get-ChildItem
instead - the LiteralPath
parameter on built-in cmdlets is always aliased PSPath
, which happens to be the name of a property that the providers add to all drive items, making the pipeline-binding work automatically:
Get-ChildItem -File -Recurse |Resolve-Path -Relative
# Explicit binding to LiteralPath no longer required