繁体   English   中英

无法在名称包含“[”的目录中使用“ForEach-Object -Parallel”

[英]Unable to use the “ForEach-Object -Parallel” in a directory with a name containing “[”

在名称包含“[”的目录中使用ForEach-Object -Parallel cmdlet 将返回 WildcardPatternException。 删除-Parallel ,它将成功运行。

我创建了几个目录并运行了以下命令。
1..5 | ForEach-Object -Parallel {Write-Host $_}
每个运行目录的返回差异如下。

 PS D:\[example> 1..5 | ForEach-Object -Parallel {Write-Host $_}

将返回 WildcardPatternException。

 PS D:\[]example> 1..5 | ForEach-Object -Parallel {Write-Host $_} PS D:\[ex]ample> 1..5 | ForEach-Object -Parallel {Write-Host $_}

将返回 ItemNotFoundException。

 PS D:\[e]xample> 1..5 | ForEach-Object -Parallel {Write-Host $_} PS D:\]example> 1..5 | ForEach-Object -Parallel {Write-Host $_}

跑成功,返回5个值。

有没有办法在不重命名目录的情况下解决这个问题?

正如评论中提到的,这是一个错误。

ForEach-Object -Parallel通过称为TaskPool的东西将脚本块的执行卸载到多个后台运行空间来工作。

为了模拟调用者环境,PowerShell 将后台运行空间配置为类似于默认运行空间,包括将当前提供程序的lotation 设置为调用者的任何内容。

不幸的是,用于设置当前位置的内部 API 默认为扩展通配符,相当于默认为:

Set-Location -Path 'D:\[]example'

代替

Set-Location -LiteralPath 'D:\[]example'

现在已经修补(适用于ForEach-Object -ParallelStart-PSThreadJob ),预计两者都将在今年晚些时候发布 7.1 版

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM