Мне нужно искать переменные, заканчивающиеся на 01 02 03 и т. Д., Пока переменная не существует, а затем продолжить со сценарием.В этом цикле итерация 01 повторяется, прежде чем перейти к 02 03 04 05 и т. Д. Почему 01 повторяется?
Мои переменные заканчиваются двузначными числами, поэтому я преобразую целое число в строку перед поиском переменной.Мне удалось обойти проблему, возникшую у меня, снова увеличивая $ i, прежде чем войти в цикл, что нормально, но я немного озадачен.
Первоначальный сценарий, который повторяет 01 дважды
$i=1
$CopyFiles_Content_No = ($i).ToString('00')
do {
$CopyFiles_Contents += (Get-Item env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No)).Value
$CopyFiles_Content_No = ($i++).ToString('00')
} while (Test-Path env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No) -ErrorAction Ignore)
Чтобы легко воспроизвести это, просто введите в Powershell следующую команду:
$i=1 #Set Int
$CopyFiles_Content_No = ($i).ToString('00') #Convert to double digit string
$CopyFiles_Content_No #See output which is 01
$CopyFiles_Content_No = ($i++).ToString('00') #Increment $i and assign to variable
$CopyFiles_Content_No #See output which is still 01
$CopyFiles_Content_No = ($i++).ToString('00') #Increment $i and assign to variable
$CopyFiles_Content_No #See output which is 02
$CopyFiles_Content_No = ($i++).ToString('00') #Increment $i and assign to variable
$CopyFiles_Content_No #See output which is 03
Обходной прием - увеличить $ 1 перед входом в цикл
$i=1
$CopyFiles_Content_No = ($i++).ToString('00')
do {
$CopyFiles_Contents += (Get-Item env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No)).Value
$CopyFiles_Content_No = ($i++).ToString('00')
} while (Test-Path env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No) -ErrorAction Ignore)