【问题标题】:PowerShell loop range with steps带有步骤的 PowerShell 循环范围
【发布时间】:2018-11-23 18:07:09
【问题描述】:

我正在尝试从 BATCH 迁移到 PowerShell,并且我正在尝试转换我自己的脚本。

我的问题在于循环范围:我原来的 BATCH 脚本是这样的

   for /L %%U in (123,2,323) do ECHO %%U

会打印出来

123
125
127
...

使用 Powershell,范围将是 123..323,因此

123..323 | % {Echo $_ }

给我

123
124
125
...

有没有办法设置步长不同于 1 的范围?我找到的所有示例要么列出所有数字(我有数百个......),要么使用数字之间的两个点。

【问题讨论】:

标签: powershell batch-file foreach range


【解决方案1】:

使用原始方法(第 2 步):

(123..323) | % {if( $_ -band 1 ) {$_ }}

第 3 步及以上:

 (123..323) | % {if( !($i++ % 3) ) {$_ }} 

【讨论】:

  • 我几乎看不到与开始、步和结束值的迭代有相似之处,即使您的方法具有相同的效果。
  • 好的,在这种情况下是 (123..323) | % {if( !($i++ % 3) ) {$_ }} 效果更好,但我喜欢使用快速二元运算符的方法。
  • 我无法理解如何将步长从 2 更改为另一个给定的数字。
  • 见之前的评论。
【解决方案2】:

简单的 Google 搜索应该能找到你。

for ($i=123; $i -le 323; $i=$i+2 ) {Write-Host $i;}

(初始化;保持循环运行的条件;迭代)

【讨论】:

  • 谢谢,我怀疑我找不到这个解决方案,因为我在寻找错误的东西。现在我将研究如何继续传递变量。
  • @Squashman,您也可以使用+=2(类似于Set /A i+=2cmd.exe,例如For ($i=123; $i -LE 323; $i+=2) {$i}.
  • @Squashman 这个解决方案给了我对步骤的期望控制(并且很容易理解,因为它就像 php 中的计数器),我可以成功地转换我现有的几个 BATCH 脚本。事实证明,Powershell 的速度要快 2 倍,因此这是我的脚本编写需要改进的地方!
  • @Lila Powershell 确实使用比批处理文件更少的代码完成了许多任务,但是批处理文件仍然可以比 PowerShell 更有效地完成很多事情。有些东西我可以在一个批处理文件中编写,它的代码行数是 Powershell 的 10 倍,但运行速度比 Powershell 中的一行代码快。
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 2021-12-30
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
相关资源
最近更新 更多