簡體   English   中英

PowerShell將每個字符串部分設置為變量以供重用

[英]PowerShell set each string part as a variable for reuse

我在一個文件夾中有一個文件列表,每個文件都采用以下格式:custID_invID_prodID或custID_invID_prodID_Boolvalue。 對於每個文件,我都需要根據“ _”將其分成多個部分。 目前,我有以下代碼:

$files = Get-ChildItem test *.txt
foreach($f in $files){
    $file = @()
    $file += ([String]$f).Split("_")
    $total = ([String]$f).Split("_") | Measure-Object | select count
    Write-Host  "${total}"
    if($total -eq 2) {
    for($i = 2; $i -lt $file.length; $i+=3) {
        $file[$i] = $file[$i].trimend(".txt")
        Write-Host  "${file}"
    }
    }
}

問題是寫主機“ $ {total}”等於@ {Count =#},其中#是在文件中找到"_"真實次數。 我如何在if語句中使用$total來基於找到的"_"數執行不同的操作?

將所需的部分直接分配給命名變量而不是使用數組會不會更簡單?

foreach($f in (Get-ChildItem test *.txt)) {
    $custId, $invID, $prodID, $Boolvalue = $f.BaseName -split "_"
    Write-Host $custId, $invID, $prodID, $Boolvalue
}

如果名稱只有3個部分,則只需將$Boolvalue設置$Boolvalue空字符串。

還要注意,拆分后不必將擴展名從最后一個元素上BaseName ,只需使用BaseName屬性即可獲取不帶擴展名的名稱。

您需要獲取計數屬性值,例如if測試中的$total.count 您也可以像這樣清理它。

$files = Get-ChildItem test *.txt
foreach($f in $files){
    $file = @(([String]$f).Split("_"))
    Write-Host "$($file.Count)"
    if($file.Count -eq 2) {
        for($i = 2; $i -lt $file.length; $i+=3) {
            $file[$i] = $file[$i].trimend(".txt")
            Write-Host  "${file}"
        }
    }
}

如果您提供了有關您要執行的操作的更多信息,我們可以進行更多清理。 例如 似乎您想執行以下操作:

Get-ChildItem test *.txt | ForEach-Object {
    $file = @($_.BaseName.Split("_"))
    Write-Host "$($file.Count)"
    if($file.Count -eq 2) {
        Write-Host $file 
    }
}

在我看來,您正在艱難地做這件事。 為什么不:

$x = "aaa_bbb_ccc"
$cnt = $x.Split("_").count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM