我正在编写一个简单的脚本,使用7zip的命令行提取文件夹中的存档,然后删除原始存档。
我的脚本有一部分没有按照我期望的方式运行。我不能让我的if语句正确触发。下面是一段代码:
if($CurrentRar.Contains(".part1.rar")){
[void] $RarGroup.Add($CurrentRar)
# Value of CurrentRar:
# Factory_Selection_2.part1.rar
$CurrentRarBase = $CurrentRar.TrimEnd(".part1.rar")
# Value: Factory_Selection_2
for ($j = 1; $j -lt $AllRarfiles.Count; $j++){
$NextRar = $AllRarfiles[$j].Name
# Value: Factory_Selection_2.part2.rar
if($NextRar.Contains("$CurrentRarBase.part$j.rar")){
Write-Host "Test Hit" -ForegroundColor Green
# Never fires, and I have no idea why
# [void] $RarGroup.Add($NextRar)
}
}
$RarGroups.Add($RarGroup)
}
if($NextRar.Contains("$CurrentRarBase.part$j.rar"))
是我不能到达的线。
如果我将其缩短为if($NextRar.Contains("$CurrentRarBase.part"))
,则触发true。但只要我添加内联$j
它总是触发假。我试过将$j
铸造成字符串,但它仍然不起作用。我错过了什么愚蠢的东西吗?
谢谢你的帮助。
问题似乎是您的for
语句和数组/列表是零索引的事实(意味着它们从0开始)。
在您的情况下,$AllRarfiles
的索引0
可能是part1
和您的for
语句以1
开始,但索引1
的文件名不包含part1
($NextRar.Contains("$CurrentRarBase.part$j.rar"
),但part2
($j + 1
)。
作为表比较
Index/$j |
Value | 用于与Index进行比较的构建字符串 | 0 | Factory_Selection_2.part1. rar | Factory_Selection_2.part0. rar | 1
---|---|---|
Factory_Selection_2.part2. rar | Factory_Selection_2.part1. rar | |
Factory_Selection_2.part3. rar | Factory_Selection_2.part2. rar | |
3 | Factory_Selection_2.part4. rar | Factory_Selection_2.part3. rar |