Powershell: есть ли способ добавить переменные из массива в файл в виде строк? - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь заполнить файл. lua переменными, содержащими имена файлов в папке «data» (количество этих файлов может отличаться). Например, у меня есть следующая структура папок:

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 l oop правильное количество раз и используйте элементы массива в качестве вывода в файле. lua.

1 Ответ

2 голосов
/ 08 января 2020

Создайте многострочную строку с файловой структурой, которую вы можете использовать в качестве шаблона:

$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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...