Powershell: 有没有一种方法将数组中的变量作为字符串添加到文件中?

我试图用“数据”文件夹中的文件名组成的变量填充一个.lua文件(这些文件的数量可能会变化)。例如,我有以下文件夹结构:

Object
  data
    file1.meta
    file2.meta
  stream
  *.lua file

我编写如下代码以从数据文件夹中获取对象:

$Path = Get-ChildItem -Path 'C:\object\data\' -Name '*.meta' -File
$Path.ForEach([string])

这很神奇。我得到了作为数组中项的结果,正是我想要的。我想将这些数组项用作“填空”作为单独的变量创建.lua文件,其将如下所示:

files
{
    'data/file1.meta',
    'data/file2.meta',
}

data_file 'METADATA_FILE1' 'data/file1.meta'
data_file 'METADATA_FILE2' 'data/file2.meta'

我能够使用$Path \ [0]和$Path \ [1]等硬代码来完成此操作,但我可以潜在地添加/减少更多的文件,并且每次需要包含数据文件夹所包含的确切数量…我正在努力运行 foreach循环正确的次数,并使用数组项作为.lua文件中的输出。

点赞
用户712649
用户712649

使用下面的文件结构创建一个多行字符串,可以作为模板:

$luaFileTemplate = @'
files
{{
{0}
}}

{1}
'@

现在,您可以使用 .ForEach()-join 根据文件名创建内容:

$fileLines = $Path.ForEach({"    'data/$_',"}) -join [Environment]::Newline
$dataFileCount = 1
$dataFileLines = $files = $Path.ForEach({"data_file 'METADATA_FILE$(($dataFileCount++))' 'data/$_'"}) -join [Environment]::Newline

最后,使用 -f 运算符将值应用于模板字符串并将其写入磁盘:

$luaFileContents = $luaFileTemplate -f $fileLines,$dataFileLines
$luaFileContents |Set-Content final_file.lua
2020-01-08 14:23:15