如何将混合字符串的分隔列表转换为powershell脚本的数组

时间:2015-02-12 02:51:58

标签: arrays string powershell

我正在寻找一个问题,我有一个逗号分隔的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"
}

有关如何进行的任何想法?在此先感谢您的任何帮助

2 个答案:

答案 0 :(得分:1)

你可以从这开始,也许:

$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

答案 1 :(得分:1)

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")}