簡體   English   中英

如何將混合字符串的定界列表轉換為Powershell腳本的數組

[英]How to convert a Delimited List of Mixed Strings to an array for powershell script

我正在解決一個長文件,用逗號分隔的有序8位數字和范圍(帶前導零),如下所示:

00001253,00001257-00001268,00001288,...,02154320,02154321,02154323-02154327,...

我想(a)將不屬於范圍的任何值存儲為PowerShell數組中的標記,同時保留前導零,並且(b)將范圍擴展到所有其對應的值,並將標記存儲在同一數組中。 到目前為止,這是我出於目的拼湊的PowerShell“腳本”:

$refids = @(ARRAY_DERIVED_FROM_ABOVE_LIST)

foreach ($refid in $refids) {
New-Item c:\scripts\$refid.txt -type file -force -value "KEY:$refid"
}

關於如何進行的任何想法? 在此先感謝您的協助

您可以從此開始,也許:

$string = '00001253,00001257-00001268,00001288,02154320,02154321,02154323-02154327'

$string.split(',') |
foreach {
  if ($_.Contains('-'))
    {
     invoke-expression ($_.replace('-','..')) |
     foreach {'{0:D8}' -f $_}
    }

  else {$_}
 }

00001253
00001257
00001258
00001259
00001260
00001261
00001262
00001263
00001264
00001265
00001266
00001267
00001268
00001288
02154320
02154321
02154323
02154324
02154325
02154326
02154327

Mjolinor的回答很好。 有些人不使用Invoke-Expression 這是另一個示例,它在顯示稍有不同的方法的同時完成了同一件事。

$string = '00001253,00001257-00001268,00001288,02154320,02154321,02154323-02154327'

$string.split(',') | ForEach-Object {
    If($_.Contains('-')){
        $_.Split("-")[0]..$_.Split("-")[1]
    } Else {
        $_
    } 
} | ForEach-Object{ Write-Output ([string]$_).PadLeft(8,"0")}

暫無
暫無

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

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