如何将路径附加到要存储在数组中的每个文件中?

时间:2019-05-30 17:49:22

标签: powershell

假设我有一个数组

$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 个答案:

答案 0 :(得分:3)

您可以使用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

我们正在使用属性 FolderName 创建一个new-object PSObject,该属性将存储要添加到文件中的文件夹名称。 数组,它将保存最终的数组对象。 文件(将是ScriptMethod成员),该成员会将文件夹添加到名称中,如果未输入任何内容作为参数,则将返回 Array 属性