Объединить переменную int из цикла for со строкой - PullRequest
0 голосов
/ 28 июня 2018

Я передаю, возможно, четыре имени файла: FileName1, FileName2, FileName3, FileName4.

Некоторые могут быть пустыми, некоторые нет. Из-за этого мне нужно проверить, если они пусты, прежде чем их использовать. Так что вместо использования четырех операторов if я думал, что просто переберу их. Как я хотел сделать это было так:

for ($i = 1; $i -lt 5; $i++) {
    $FileName = $FileName + $i
    Write-Host $FileName
}

Таким образом, я могу получить Filename1, FileName2, FileName3, FileName4. Вместо этого я получаю 1, 1 + 2 и т. Д.

Я также пробовал $FileName$i, $FileName"$($i)", $FileName + "$($i)".

Есть идеи?

EDIT

FileName1, FileName2, FileName3, FileName4 - переменные, которые передаются в сценарий. Это могут быть FileName1="Budget2018.xlsx", FileName2="MonthlyExpenses.xlx", FileName3="", FileName4="". Или все четыре переменные могут содержать значения ... или просто FileName1 может содержать значение и т. Д.

Мне нужно проверить, пусты ли они, прежде чем я продолжу их обрабатывать. Поэтому вместо того, чтобы использовать 4 оператора if, чтобы проверить, не являются ли они пустыми, я подумал, что мог бы перебрать их, ссылаясь на переменные как $Filename$i, где $i будет значением от 1 до 4. Я пытаюсь объединить два значения вместе, чтобы представляют переменные, которые являются параметрами.

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Это приводит к появлению FileName1, FileName2 и т. Д., Но я не уверен, как это соотносится с «Я передаю четыре возможных имени файла», поскольку в вашем сценарии нет списка.

For($i = 1; $i -lt 5; $i++){

        $FileName = "FileName$i"
        Write-Host $FileName
    }
0 голосов
/ 28 июня 2018

Если у вас есть одно имя файла и вы хотите создать список, основанный на этом, вы можете сделать что-то вроде этого:

$FileName = 'test'
$FileList = for ($i = 1; $i -le 4; $i++) { "$FileName$i" }
$FileList
# => test1
# => test2
# => test3
# => test4

Но я подозреваю, что у вас есть список файлов, учитывая, что в вашем вопросе было указано "проверьте, не пусто ли".

0 голосов
/ 28 июня 2018

Если я понимаю, что вы хотите, то это должно сделать это:

For($i = 1; $i -lt 5; $i++){
        $FileName = 'FileName{0}' -f $i
        Write-Host $FileName
}

Если вы хотите определить корневую часть имени как переменную, то:

$root = 'FileName'
For($i = 1; $i -lt 5; $i++){
        $FileName = '{0}{1}' -f $root,$i
        Write-Host $FileName
}

Хорошо, поэтому, основываясь на самом последнем редактировании, вот способ сделать то, что, как я теперь думаю, вы хотите:

1..4 | %{(ls variable:\$("FileName$_")).value}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...