我正在撰寫一個簡單的腳本,它使用 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")),它就會觸發。但是一旦我添加行內$j它總是觸發錯誤。我試過轉換$j為字串,但它仍然不起作用。我錯過了什么愚蠢的東西嗎?
感謝任何幫助。
uj5u.com熱心網友回復:
問題似乎是您的for陳述以及陣列/串列是零索引的事實(意味著它們以 0 開頭)。
在您的情況下,索引可能是 the0并且您的陳述句以 開頭,但索引的檔案名不包含( ),而是包含( )。$AllRarfilespart1for11part1 $NextRar.Contains("$CurrentRarBase.part$j.rar"part2$j 1
作為表格比較
指數 /$j |
價值 | 用于比較的內置字串(帶索引) |
|---|---|---|
| 0 | Factory_Selection_2.part 1.rar _ | Factory_Selection_2.part 0.rar _ |
| 1個 | Factory_Selection_2.part 2.rar _ | Factory_Selection_2.part 1.rar _ |
| 2個 | Factory_Selection_2.part 3.rar _ | Factory_Selection_2.part 2.rar _ |
| 3個 | Factory_Selection_2.part 4 .rar | Factory_Selection_2.part 3.rar _ |
另一種更簡單的方法
由于您似乎想要將屬于一起的拆分 RAR 檔案分組,您還可以使用更簡單的方法Group-Object
# collect and group all RAR files.
$rarGroups = Get-ChildItem -LiteralPath 'C:\somewhere\' -Filter '*.rar' | Group-Object -Property { $_.Name -replace '\.part\d \.rar$' }
# do some stuff afterwards
foreach($rarGroup in $rarGroups){
Write-Verbose -Verbose "Processing RAR group: $($rarGroup.Name)"
foreach($rarFile in $rarGroup.Group) {
Write-Verbose -Verbose "`tCurrent RAR file: $($rarFile.Name)"
# do some stuff per file
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534714.html
標籤:视窗电源外壳脚本
上一篇:獲取最大字串
下一篇:PowershellGet-LocalGroupMember將計算機名稱添加到$._Name因此無法與txt檔案進行比較
