我创建了一个简单的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
代码的某处?
答案 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
}