Как добавить путь к каждому файлу, который будет сохранен в массиве? - PullRequest
0 голосов
/ 30 мая 2019

предположим, у меня есть массив

$f_attachments = @()

каждый файл у меня есть, я просто добавляю к нему

$f_attachments += $file

однако, я хотел бы также включить каталог для каждого файла, сохраненного в этом массиве

другими словами, вместо того, чтобы делать что-то вроде этого:

$f_attachments += $currentFolder\$file1
$f_attachments += $currentFolder\$file2
etc...

Могу ли я просто добавить его на уровне массива?

$f_attachments = @($currentFolder)

больше объяснений

У меня ОГРОМНЫЙ скрипт. я добавляю файлы (то есть $f_attachments += $file1 $f_attachments += $file2 и т. д.) в массив $f_attachments в произвольных частях сценария. этот массив определен в ОЧЕНЬ НАЧАЛЕ

$f_attachments = @()

предположим, что мой полный сценарий такой:

$f_attachments = @()
if() 
{
do something...
$f_attachments += $currentFolder\$file1
}
else
{
do something...
$f_attachments += $currentFolder\$file2
}
....

как видите, я добавляю $ currentFolder \ каждый раз, когда добавляю файл в массив

я хочу что-то на уровне определения массива, здесь $f_attachments = @()

, который автоматически добавит это $currentFolder\

другими словами, идеальное решение будет выглядеть так:

$f_attachments = @($currentFolder\)
if() 
{
do something...
$f_attachments += $file1
}
else
{
do something...
$f_attachments += $file2
}
....

1 Ответ

3 голосов
/ 30 мая 2019

Вы можете зациклить массив с помощью foreach-object и добавить имя папки.

| означает трубу. Он берет данные из объекта ввода и отправляет их следующей команде в конвейере. Это случай %{}, который является псевдонимом для Foreach-Object. Затем вы сохраняете вывод из %{} обратно в переменную $files

$files = @("abc.txt","efg.txt","hij.txt","lmn.txt")

$files = $a | %{
    "FolderName\$_"
}

$files

РЕДАКТИРОВАТЬ: сообщение было обновлено с дополнительной информацией.

Итак, вам нужен пользовательский объект, который добавляет папку к имени каждого добавляемого файла:

$Files = New-Object PSObject -Property @{
    Array = @()
    FolderName = ""
}
$Files | Add-Member -MemberType scriptmethod  -Name Files -Value {
    param([string]$File = "")
    if($File.Length -eq 0){
        return $this.Array
    }else{
        $this.Array += "$($this.FolderName)\$File"
    }
}


$Files.FolderName = "FolderHere"
$Files.Files("Test.txt")
$Files.Files("Test2.txt")
$Files.Files("Test3.txt")
$Files.Files("Test4.txt")
$Files.Files()

Это возвращает

FolderHere\Test.txt
FolderHere\Test2.txt
FolderHere\Test3.txt
FolderHere\Test4.txt

Мы создаем new-object PSObject со свойствами FolderName , в котором будет храниться имя папки для добавления в файлы. Array , который будет содержать конечный объект массива. Files , который будет ScriptMethod членом, который добавит папку к имени и, если ничего не введено в качестве параметра, вернет свойство Array

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...