带通配符的Powershell -LiteralPath(字面路径)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带通配符的Powershell -LiteralPath(字面路径)相关的知识,希望对你有一定的参考价值。

由于文件名有方括号,我需要使用 -LiteralPath. 然而,通过这样做,我失去了在我的代码中使用通配符(包括任何文件扩展名)的能力。

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
foreach ($f in $files)
    Test-Path -LiteralPath "$somepath\$($f.BaseName).*" -PathType Leaf

其中一个文件是 file1 [123].txtTest-Path 该文件失败。如何修复这种行为?Test-Path fails for file [123].txt

正如 @Wasif 所建议的那样,由于文件名有方括号,我需要使用 -LiteralPath。Suggested solution 1Suggested solution 2

答案

试试下面的方法。

Test-Path 'file1 ``[123].*'
foreach ($f in $files)
    $path = "$somepath\$($f.BaseName).*".Replace('[', '``[')
    Test-Path -Path $path -PathType Leaf

另一答案

不使用"$somepath/$($f.BaseName).*",你可以直接使用$files变量本身的文件系统对象的完整路径,即 $files.FullName 我希望下面的代码对你有用:)

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
$files | ForEach-Object Test-Path -LiteralPath $_.FullName -PathType Leaf
另一答案

你已经很接近了,只需在-Filter参数中加入通配符部分,并删除-PathType。

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
foreach ($f in $files)
    Test-Path -LiteralPath "$somepath" -Filter "$($_.BaseName).*"

但你可以像这样使用-Path。

-Path `"$somepath\$($_.basename).*`"

以上是关于带通配符的Powershell -LiteralPath(字面路径)的主要内容,如果未能解决你的问题,请参考以下文章

(21)Powershell中的通配符

powershell 的NuGet通配符,update.ps1

如何在 PowerShell 的 Get-ChildItem -Exclude cmdlet 中对目录使用通配符

powershell中的正则表达式

PowerShell管理本地进程

使用 PowerShell 停止进程,我可以绕过确认吗?