gpt4 book ai didi

arrays - Powershell返回数组第二项的文件大小;第一和第三很好

转载 作者:行者123 更新时间:2023-12-02 23:40:19 26 4
gpt4 key购买 nike

我有一个奇怪的问题。我有一个Powershell脚本,该脚本应该监视文件目录,然后移动并重命名它们。它检查输出目录,以查看是否已存在名称相同的文件,其格式为“旅行ID X收据批次Y.pdf”(Web表单的原始输出始终为Y = 1),并且是否确实将Y替换为行程ID为X的其他文件的现有Y的最高数量是多少。如果还没有,则保持Y = 1。它成功完成了此操作,但第二次匹配除外,在第二次匹配中,2 Y代替的是2,该数字取决于文件。这似乎是文件大小(以字节为单位)加上1。脚本的示例结果(从将同一源文件复制/粘贴到监视的目录中):

Trip ID 7 Receipts Batch 1.pdf

Trip ID 7 Receipts Batch 126973.pdf

Trip ID 7 Receipts Batch 3.pdf

Trip ID 7 Receipts Batch 4.pdf


我的代码的相关部分在这里:
$REFile = "Trip ID " + $TripID + " Receipts Batch "
$TripIDCheck = "Trip ID " + $TripID

$TripFileCount = Get-ChildItem $destination |Where-Object {$_.Name -match $TripIDCheck}
$BatchCount = $TripFileCount.GetUpperBound(0) + 1

$destinationRegEx = $destination + $REFile + $BatchCount + ".pdf"

Move-Item -Path $path -Destination $destinationRegEx -Force
为了计算数组中的项目数,我使用了上面看到的内容以及$ TripFileCount.Length和$ TripFileCount.Count。它们的行为都相同,似乎是在获取文件,检查文件的大小,将第二项的Y值设置为该值,然后按预期对待第三,第四等项。对于我的一生,我不知道发生了什么事。你们有没有看过这样的东西?
编辑:试图强制$ TripFileCount作为一个数组
$TripFileCount = @(Get-ChildItem $destination |Where-Object {$_.Name -match $TripIDCheck})
也不起作用。它仍然这样做。

最佳答案

TessellatingHeckler所述,您的症状确实表明您没有考虑到诸如Get-ChildItem之类的cmdlet并不总是返回数组,而是可能返回单个标量项(或根本没有任何项)的事实。

因此,您不能在此类cmdlet的输出上盲目地调用诸如.GetUpperBound().Length之类的方法/属性。有两种解决方法:

  • 使用数组子表达式运算符@(...)以确保将封闭命令的输出视为数组,即使仅返回一个对象或根本不返回任何对象。
  • 在PSv3 +中,甚至在单个对象或.Count上也使用$null属性来隐式地将它们视为数组。

  • 以下简化的解决方案在 .Count调用的输出上使用了 Get-ChildItem属性,该属性在所有3种情况下均可正常工作: Get-ChildItem不匹配任何文件,一个文件或多个文件。
    $prefix = "Trip ID $TripID Receipts Batch "
    $suffix = '.pdf'

    $pattern = "$prefix*$suffix"

    $count = (Get-ChildItem $destination -Filter $pattern).Count

    Move-Item -Path $path -Destination (Join-Path $destination "$prefix$($count+1)$suffix")

    注意:
  • 如果您使用的是PowerShell v2,则在@之前添加(...)@(...)(数组子表达式运算符)确保将封闭命令的输出始终视为数组,即使该输出仅包含1个对象或根本不包含任何对象。
  • 在PowerShell v3及更高版本中,此行为是隐式的,尽管有一些警告-请参阅我的this answer
  • 关于arrays - Powershell返回数组第二项的文件大小;第一和第三很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209169/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com