Foreach l oop не работает в PowerShell - PullRequest
       13

Foreach l oop не работает в PowerShell

1 голос
/ 12 февраля 2020

Мне нужна помощь с foreach l oop в Powershell. Таким образом, цель состоит в том, чтобы создавать новые файлы в PowerShell в зависимости от количества запросов пользователя, поэтому, если пользователь запрашивает создание 4 одинаковых файлов, он должен создать четыре файла в запрошенной папке. Я просто не могу понять, почему мой foreach l oop не создает несколько файлов. Это просто делает один файл каждый раз. Я приложил часть кода.

$FileName = Read-Host "Enter a file name"
$FilePath = Read-Host "Enter a file path"
$FileNumber = Read-Host "How many files need to be created?"
$num = 1

if ($FileName -gt 0) { 

    foreach($num in 4) {
    New-Item -Path $FilePath -Name $filepath
    #Write-Host $number $FileNumber
    }

}

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

$ FileName является строкой, поэтому, если ($ FileName -gt 0) вернет true, это не очень хорошая практика.

Также нет ничего «в» числе 4. Правая сторона In должна быть коллекцией объектов, которая ранее нигде не была создана в скрипте. Затем у вас есть опечатка, где вы указываете $ FileName для имени и параметров пути. Во всяком случае, я думаю, что вы ищете что-то вроде этого:

$FileName = Read-Host "Enter a file name"
$FilePath = Read-Host "Enter a file path"
$FileNumber = Read-Host "How many files need to be created?"
$num = 1

if ($FileName) { 
$num..$FileNumber |
    ForEach-Object{
        $NewFile = $FileName + "_" + $_
        New-Item -Path $FilePath -Name $NewFile -ItemType File
    }
}

Если лог c будет работать для ваших целей. Затем я отправляю диапазон номеров по конвейеру для командлета ForEach-Object. Примечание. Это отличается от используемого ключевого слова ForEach. В любом случае, объедините число, в данном случае $ _ с базовым именем файла, которое было ранее введено, затем go вперед и создайте элемент.

Надеюсь, что это поможет, дайте мне знать ...

1 голос
/ 12 февраля 2020

Развивая то, что сказал Lee_Dailey, я отредактировал ваш код. Смотрите мои заметки в комментариях под кодом.

$FileName = Read-Host "Enter a file name"
$FilePath = Read-Host "Enter a file path"
$FileNumber = Read-Host "How many files need to be created?"
# this next line shouldn't be needed here so I commented it out
# $num = 1

# You don't need "-gt 0".  Just use "if ($FileName)". which basically means:
# "if there is a value for $Filename then execute the block"
if ($FileName) {         
    # "foreach" really isn't the right approach here
    # use a for loop instead.  This one means:
    # start counting at $i (which is 1), if $i is less than or
    # equal to $FileNumber then execute the code block
    # and then increment $i at the end, making $i = 2
    # on the second trip through the loop
    for ($i=1; $i -le $FileNumber; $i++){
        # if you are making multiple files you can't give them all the
        # same name.  So you need to add a number at the end of each file
        # you create.  In this case $i
        $thisFileName = "$FileName" + "$i"
        New-Item -Path $FilePath -Name $thisFileName
        #Write-Host $number $FileNumber
    }

}
...