2015-12-07 2 views
1

Я создал простой сценарий PowerShell, чтобы изменить значение заголовка одного столбца в группе файлов CSV. Когда я запускаю сценарий в виде файла .ps1 в тестовой папке, содержащей 25 файлов CSV, скрипт, как представляется, запускается (появляется мигающий курсор), но он работает уже более часа, и пока нет выходных файлов.Простой скрипт появляется навсегда, без выхода ...?

Может ли кто-нибудь указать, что здесь может быть неправильным? В прошлом я написал и выполнил несколько сценариев 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" 
    } 
} 

EDIT: Оказывается я пропустил $i++ срок и код теперь работает должным образом, однако, вывод состоит только из VZA заголовка и ни один из данных из импортируемого файла CSV. Где я ошибаюсь, я предполагаю, что где-то в коде Select-Object?

+3

Где в сценарии вы модифицирования '$ i'? Я вижу, что он задан изначально, а затем никогда не менялся, а это значит, что он всегда будет меньше 211, и цикл никогда не остановится. –

+0

Ага, я определенно пропустил $ i ++, я должен был включить между последними двумя фигурными скобками. Задача решена. Спасибо, сэр! – AggroCrag

+0

Теперь, когда код запущен, в результатах появилась еще одна проблема - вывод не содержит ничего, кроме заголовка «VZA» и ни одного из данных из входного CSV-файла. Любая идея, где я ошибаюсь, или я должен задать этот вопрос в новой теме? – AggroCrag

ответ

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 
} 

В качестве альтернативы, вы можете использовать версию Powershell из цикла в for

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

Спасибо, я забыл об этом. Тем не менее, я столкнулся с проблемой в самом коде, который я добавил в OP как редактирование ... Должен ли я задать этот вопрос в новом потоке? Я здесь совсем новый. – AggroCrag

+0

Это, вероятно, должно войти в новый вопрос, чтобы привлечь внимание, которого оно заслуживает. –

+0

Будет, спасибо. – AggroCrag

Смежные вопросы