“[”和“]”字符弄乱了get-childitem

Posted

技术标签:

【中文标题】“[”和“]”字符弄乱了get-childitem【英文标题】:"[" and "]" characters mess up get-childitem 【发布时间】:2014-03-04 01:16:33 【问题描述】:

使用 PowerShell 4.0, 我正在尝试获取多个目录的大小,但在 windows 告诉我的内容与我的代码告诉我的内容之间得到了非常不一致的结果。

有问题的代码是:

$temp4 = ($folderInfo.rootFolder).fullname
$folderInfo.directories += Get-ChildItem -LiteralPath $temp4 -Recurse -Force -Directory
$folderInfo.directories += $folderInfo.rootFolder
foreach ($dir in $folderInfo.directories)

    $temp3 = $dir.fullname
    $temp2 = Get-ChildItem -LiteralPath $temp3 -Force
    $temp = (Get-ChildItem -LiteralPath $dir.fullname -Force -File | Measure-Object -Property length -Sum -ErrorAction SilentlyContinue).Sum
    $folderInfo.totalSize += $temp

return $folderInfo

如果$folderInfo.rootFolder = D:\sample 然后我得到我想要的 但是如果$folderInfo.rootFolder = D:\[sample 然后我得到

Get-ChildItem:无法检索 cmdlet 的动态参数。指定的通配符模式无效:sample [sample 在 C:\powershell 脚本\test.ps1:55 char:12 + $temp = (Get-ChildItem $dir.fullname -Force -File | Measure-Object -Property l ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.GetChildItemCommand

如果D:\sample 在其子项中的某处包含"[sample" 的文件夹,情况也是如此。我将从其他所有内容中获得正确的结果,但问题目录中或之外的任何内容。 $dir.pspath$dir.fullname 都搞砸了。

编辑:更改了上面的代码以反映它的当前状态并包含完整的错误。 再次编辑:上面的代码现在有一些调试临时变量。

【问题讨论】:

【参考方案1】:

使用-LiteralPath 参数代替-Path 来抑制通配符通配符。此外,由于您使用的是 V4,因此您可以使用 -Directory 开关并省去 $_.iscontainer 过滤器:

$folderInfo.directories = 
 Get-ChildItem -LiteralPath $folderInfo.rootFolder -Recurse -Force -Directory 

如果在目录树的下方有更多方括号,请在后续的 Get-ChildItem 命令中继续使用 literpath:

$folderInfo.directories += Get-ChildItem -LiteralPath $folderInfo.rootFolder -Recurse -Force -Directory
    $folderInfo.directories += Get-Item -LiteralPath $folderInfo.rootFolder
    foreach ($dir in $folderInfo.directories)
    
        $temp2 = Get-ChildItem -LiteralPath $dir.PSPath -Force
        $temp = (Get-ChildItem -LiteralPath $dir.fullname -Force -File | Measure-Object -Property length -Sum -ErrorAction SilentlyContinue).Sum
        $folderInfo.totalSize += $temp
    
    return $folderInfo

【讨论】:

我更改了代码以反映您的建议,但仍然出现错误。 编辑问题并发布更新的代码和确切的错误消息。 更改了我原来的帖子 改变了我原来的答案 我再次更改了上面的代码。虽然很快我就找出了罪魁祸首。 -recurse 参数查找通配符,而不考虑literalPath。这是基于为递归参数提供的详细信息而假设的。

以上是关于“[”和“]”字符弄乱了get-childitem的主要内容,如果未能解决你的问题,请参考以下文章

我怀疑 re.match 弄乱了控制流

电子邮件表单弄乱了 UTF-8 文本 [重复]

添加和删​​除 UIStackViews 弄乱了我的 UIScrollView

TextView 提示弄乱了 RTL 重力

自动布局弄乱了我的动画

JQM 弄乱了选择组合框的外观和功能