简单的脚本似乎永远无法输出...?

时间:2015-12-07 09:22:36

标签: csv powershell

我创建了一个简单的PowerShell脚本,以便更改一组CSV文件中一列的标题值。当我在包含25个CSV文件的测试文件夹上将脚本作为.ps1文件启动时,脚本似乎运行(闪烁光标出现),但它现在已经运行了一个多小时,并且没有出现任何输出文件爱好。

有人能指出这里可能出现的问题吗?我以前在这台计算机上成功编写并执行了几个PowerShell脚本,但从未遇到过这个问题,搜索没有产生任何结果。

#Rename the first Column header in each output file to 'VZA' so you can work
#with the data

#Iterate code through 211 possible files
$i = 1
While ($i -le 211) {
  #Set the variable to the filename with the iteration number
  $filename = "c:\zMFM\z550Output\20dSummer\20dSum550Output$i.csv"

  #Check to see if that a file with $filename exists. If not, skip to the next
  #iteration of $i. If so, run the code change the column header
  If (Test-Path $filename) {
    #Import the CSV and change the column header to VZA
    Import-CSV $filename |
      Select-Object @{ expression={_."550 1587600 VZA"}; label='VZA' } |
      Export-Csv -NoType "c:\zMFM\z550Output\20dSummer\fixed20dSum550Output$i.csv"
  }
}

编辑: 我似乎错过了$i++术语,现在代码正常运行,但输出仅由VZA标题组成,并且不包含导入的CSV文件中的任何数据。我哪里出错了,我假设在Select-Object代码的某处?

1 个答案:

答案 0 :(得分:3)

在您粘贴的脚本中,变量$i永远不会在循环内更改。在每次迭代中,它的初始值为1,始终小于211,while语句永远不会退出。

要清楚,while语句不会修改循环变量本身。要从1到211进行计数,您需要在循环内增加变量,以便它最终到达终点。

$i = 1
while($i -le 211) {
  write-output "Running iteration $i"
  # loop stuff here

  # Increment the counter
  $i += 1
}

或者,您可以使用for循环的Powershell版本

1..211 | foreach {
  write-output "Running iteration $_"
  # loop stuff here
}