假设我有一个数组
$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
}
....
答案 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 属性