gpt4 book ai didi

powershell - 转义路径中字符的函数

转载 作者:行者123 更新时间:2023-12-02 16:19:58 26 4
gpt4 key购买 nike

PowerShell 中有用于转义路径中字符的函数吗?

注意:我知道大多数 cmdlet 都提供 Path参数还提供了LiteralPath解决此问题的参数。这个问题更多的是出于好奇而不是需要,就像在我能想到的大多数用例中一样,切换到 LiteralPath说得通。然而,有一些真正的用例(例如 Start-BitsTransfer 有一个 Source 参数,但没有字面等价物)。

详细信息

如果我有一个文件c:\temp\test[0123].txt ,而不是 Get-Item 'c:\temp\test[0123].txt' ,我必须使用 Get-Item 'c:\temp\test`[0123`].txt'获得结果(或使用 LiteralPath 参数)。

甚至另一个 PowerShell 命令返回的路径也会返回未转义的字符串;即Get-ChildItem 'c:\temp\' -Filter 'test*.txt' | Convert-Path | Get-Item失败(注意:如果我们传递实际的 FileSystemInfo 对象,则一切正常,但该对象没有具有正确转义字符串路径的属性)。

我们可以使用如下代码轻松逃脱此问题:

$path = 'c:\temp\test[0123].txt'
$path = $path -replace '([][[])', '`$1' # escape square brackets by adding back ticks
Get-Item $path

但是,在转义字符串时,标准建议是避免滚动自己的解决方案/利用语言的解决方案来解决这些问题。

PowerShell 中是否有任何预先存在的函数用于此目的,或者有任何推荐的方法来实现此目的;或者是使用定制功能的唯一选择(例如下面)?

function ConvertFrom-LiteralPath {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
[string]$LiteralPath
)
process {
(New-Object -TypeName 'PSObject' -Property @{
LiteralPath = $LiteralPath
Path = $LiteralPath -replace '([][[\*\?])', '`$1' # escapes ], [, *, and ?
})
}
}

有关特殊字符的信息:

最佳答案

您可以使用以下方法:

[Management.Automation.WildcardPattern]::Escape('test[1].txt')

返回:

test`[1`].txt

记录在这里:
https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.wildcardpattern.escape

关于powershell - 转义路径中字符的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com