如何生成可用作PowerShell脚本参数的整数列表?

gudnpqoy  于 2023-05-22  发布在  Shell
关注(0)|答案(1)|浏览(167)

我有一个完全工作的PS脚本,它期望一组整数,这些整数都是要从库复制到闪存驱动器上的对象编号。此命令类似于:
提取e:1234 1235 1236
它工作正常-它只是循环$args[1..n]并将对象相关文件复制到闪存驱动器(e:例中)。
通常有一个很大的连续的对象编号集(通常是6位数的),输入它们是一件苦差事。所以,当我发现n.. n技巧时,我想我会像这样使用它(复制对象100-120):
$objList = 100..120 -join““然后
提取e:$objList
但是没有,我的脚本似乎将$objList视为单个字符串,而不是空格分隔的列表,我得到:

DBCheckItemExists : Cannot process argument transformation on parameter 'ItemID'. Cannot convert
value "100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120" to type
"System.Int64". Error: "Input string was not in a correct format."

显然PS认为这不能转换成一组整型参数
如果我把$objList的内容写在屏幕上,我会得到预期的结果:

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

如果我将其剪切并粘贴到提取命令行上,则可以工作。所以很明显这是某种数据类型的问题,所以我试着用@ symbol作为变量和范围的前缀,使它们成为字符串-但是没有,我只是得到了错误消息。
一定有什么明显的东西我错过了这里-但我不知所措!有人能帮忙吗?先谢谢你了。

7vux5j2d

7vux5j2d1#

使用-join " "可以将列表转换为字符串。另一种方法是在函数中解析列表,例如:

function foo {
  for ($i=0; $i -lt $args.length; $i++) {
    for ($j=0; $j -lt $args[$i].length; $j++) {
      $args[$i][$j];
    }
  }
}

测试它:

foo 100 (103..105) 99 (323..330)

输出:

100
103
104
105
99
323
324
325
326
327
328
329
330

将函数转换为使用process块来处理输入可能是一个好主意,例如参见this post

相关问题