Добавить имя папки к путям в массиве - PullRequest
0 голосов
/ 30 октября 2019

Я хочу добавить имя папки к началу массива (относительных) путей, используя оператор foreach, но он не вносит никаких изменений в массив (без ошибок)

Примечание:Это больше для образовательных целей, чем для функциональных, так как я работаю с использованием цикла for, который я закомментировал, но мне интересно узнать, как работает оператор foreach

$myFiles = @(
    "blah1\blah2\file1.txt"
    "blah3\blah4\file2.txt"
    "blah5\blah6\file3.txt"
)

$checkoutFolder = "folder1"

#for ($h = 0; $h -lt $myFiles.Length; $h++) {
#$myFiles[$h] = $checkoutFolder + "\" + $myFiles[$h]
#}

foreach ($path in $myFiles) {
$path = $checkoutFolder + "\" + $path
}

$myFiles

Я также попытался использоватьбуферная переменная, например,

$buffer = $checkoutFolder + "\" + $path
$path = $buffer

Но тот же результат, например, ВЫХОД:

blah1\blah2\file1.txt
blah3\blah4\file2.txt
blah5\blah6\file3.txt

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Я мог бы придумать два пути:

Создать новый массив с измененными данными старого массива

$myFiles = @(
            "blah1\blah2\file1.txt"
            "blah3\blah4\file2.txt"
            "blah5\blah6\file3.txt"
            )
$checkoutFolder = "folder1"

#Create new array $myFilesnew
$myFilesnew = @()
#For each line in in old array
foreach ($file in $myFiles)
{
#Create new row from modied row $file of $myFiles array
$row = $checkoutFolder+"\"+$file
#Add row $row to a new array $myFilesnew
$myFilesnew+=$row
}

$myFilesnew

Изменить каждую строку существующего массива:

$myFiles = @(
            "blah1\blah2\file1.txt"
            "blah3\blah4\file2.txt"
            "blah5\blah6\file3.txt"
            )
$checkoutFolder = "folder1"

$i=0
while($i-lt $myFiles.Count)
    {
     #Get $i row $myFiles[$i] from aray, perform insert of modified data, write data back to $myFiles[$i] row of the array
     $myfiles[$i]=$myFiles[$i].Insert(0,$checkoutFolder+"\");
     #Add +1 to $i
     $i++

        }
$myFiles
0 голосов
/ 30 октября 2019

Вы можете заменить начало регулярного выражения каждой строки на имя папки. Это полезная идиома для генерации компьютерных имен.

'blah1\blah2\file1.txt','blah3\blah4\file2.txt','blah5\blah6\file3.txt' -replace '^','folder1\'

folder1\blah1\blah2\file1.txt
folder1\blah3\blah4\file2.txt
folder1\blah5\blah6\file3.txt
0 голосов
/ 30 октября 2019

Лучше начать использовать командлет Join-Path, чтобы избежать создания путей с опущенными или удвоенными обратными слешами.

Примерно так бы и получилось:

$checkoutFolder = "folder1"
$myFiles = "blah1\blah2\file1.txt", "blah3\blah4\file2.txt", "blah5\blah6\file3.txt" | ForEach-Object {
    Join-Path -Path $checkoutFolder -ChildPath $_
}

$myFiles

вывод:

folder1\blah1\blah2\file1.txt
folder1\blah3\blah4\file2.txt
folder1\blah5\blah6\file3.txt
...