如何在PowerShell中转义[]?含方括号的文件夹路径报错问题
问题解决:含[]的文件夹路径导致Get-ChildItem返回空数组
问题原因
PowerShell中Get-ChildItem默认使用-Path参数,该参数会将路径中的[]解析为通配符字符范围(类似正则里的字符组),而非字面意义的方括号。因此你传入的D:\Folder [MyGitHub]会被当作匹配Folder后跟M/y/G等单个字符的路径,自然找不到实际存在的文件夹,最终$buildDirectories是空数组,索引访问时就会抛出"Cannot index into a null array"错误。
解决方案
使用Get-ChildItem的-LiteralPath参数,它会将路径当作字面量完全匹配,不解析任何通配符:
$sourcePath = "D:\Folder [MyGitHub]" [array]$buildDirectories = Get-ChildItem -LiteralPath $sourcePath | Sort-Object Name Write-Output $BuildDirectories[0]
也可以直接在调用时用单引号包裹路径并配合-LiteralPath,效果一致:
[array]$buildDirectories = Get-ChildItem -LiteralPath 'D:\Folder [MyGitHub]' | Sort-Object Name
补充说明
如果路径里包含*、?这类其他通配符字符,同样可以用-LiteralPath来避免解析问题,确保PowerShell精准定位到目标路径。
内容的提问来源于stack exchange,提问作者K. B.
相关产品推荐
相关产品推荐

