You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Get-ChildItem使用含*的变量路径报错问题咨询

解决Get-ChildItem使用含通配符的变量路径时报错的问题

这个问题我之前也碰到过,其实核心原因是PowerShell解析变量中的通配符时的小坑:直接写带*的字符串路径时,PowerShell会自动把*识别为通配符;但把路径存入变量再传递时,若处理不当,解析器可能会把*当成路径的字面字符,从而抛出“路径中有非法字符”的错误。

给你几个可行的解决方案:

方案1:直接传递变量(去掉多余的双引号)

你原来的代码里给变量加了双引号"$PackagePath",其实完全没必要,直接传递变量名即可,PowerShell会正确解析其中的通配符:

$PackageName = "OrderAnalytics_EXTR.dtsx"
$PackagePath = "\\pdw01rasci001\SSISPackages\PROD\Logs\exec_package_$($PackageName)*"
$Files = Get-ChildItem $PackagePath  # 这里不要加双引号

方案2:用Join-Path安全构建路径

用Join-Path命令来拼接路径和带通配符的文件名,能避免手动拼接时可能出现的解析问题,更可靠:

$PackageName = "OrderAnalytics_EXTR.dtsx"
$BaseFolder = "\\pdw01rasci001\SSISPackages\PROD\Logs"
$FileNamePattern = "exec_package_$PackageName*"
$PackagePath = Join-Path -Path $BaseFolder -ChildPath $FileNamePattern
$Files = Get-ChildItem -Path $PackagePath

方案3:把通配符单独放在参数里

如果觉得变量里带通配符不舒服,也可以把通配符移到Get-ChildItem的参数中,这样变量只存固定路径部分:

$PackageName = "OrderAnalytics_EXTR.dtsx"
$BasePath = "\\pdw01rasci001\SSISPackages\PROD\Logs\exec_package_$PackageName"
$Files = Get-ChildItem -Path "$BasePath*"

这些方法都能解决你遇到的“非法字符”错误,推荐用方案2,因为它的可读性和鲁棒性最好,尤其是在路径复杂或者有特殊字符的场景下。

内容的提问来源于stack exchange,提问作者Akash Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:51