Powershell 脚本,其路径在字符串中带有方括号

Powershell script with a path with square brackets in a string for

我无法让我的 Powershell 脚本使用带有方括号的路径。

输入路径是 "c:\temp\yeah [就是这样]"

param (  
    [string]$folderPath = $env:folderPath
 )
$folderPath = $folderPath + "\"

    Add-Content -Path $folderPath"01-playlist.m3u" -Value "a file name.mp3"

我查看了“-literalpath”和 'Convert-path',但看不到如何在我的代码中实现它。

我相信你需要使用反引号。如果您是从 shell 执行此操作,则此方法有效 "abc ````[123````].txt" 请注意,如果用单引号引起来,反引号的数量会变为两个。

查看此答案:https://superuser.com/questions/212808/powershell-bug-in-copy-move-rename-when-filename-contains-square-bracket-charac#:~:text=Getting%20PowerShell%20to%20correctly%20recognize,four%20backticks%20to%20escape%20it

只需使用 -LiteralPath 而不是 -Path

Add-Content -LiteralPath "D:\Test\yeah [thats it]-playlist.m3u" -Value "a file name.mp3"

现在路径是字面上的,所以你不能像 Path 那样使用通配符。

顺便说一句,你的可选参数看起来很奇怪.. 除非你为它设置了环境变量,否则没有 $env:folderPath

此外,要组合路径和文件名,有一个名为 Join-Path 的 cmdlet。使用它比使用 $folderPath + "\" 这样的结构要好得多,后者很容易忘记反斜杠或添加太多反斜杠..

相反,我会写

$file = Join-Path -Path $folderPath -ChildPath '01-playlist.m3u'
Add-Content -LiteralPath $file -Value "a file name.mp3"