Добавление строк в несколько файлов Notes.ini

У меня есть сценарий PowerShell, который я хочу запустить, чтобы добавить две строки «IM_DISABLED» и «IM_NO_SETUP=1» в конец каждого файла INI.

Я хочу запустить его для папки H:\test, в которой есть подпапки, каждая из которых содержит файл notes.ini.

У меня есть следующий PowerShell, который работает с использованием -replace. Однако я не могу использовать замену и мне нужно просто добавить две новые строки в конец каждого INI.

$places = 'h:\test'
$places | Get-ChildItem -Recurse -Include Notes.ini | ForEach-Object {
    (Get-Content $_) -replace 'KitType=1', "`nKitType=1`r`nIM_DISABLED=1`r`nIM_NO_SETUP=1" |
        Set-Content $_
    'Processed: {0}' -f $_.FullName
}

person DMLM    schedule 28.01.2016    source источник


Ответы (1)


Если у вас есть PowerShell v3 или новее, вы можете просто использовать Add-Content:

$places = 'h:\test'
$lines  = 'IM_DISABLED', 'IM_NO_SETUP=1'
Get-ChildItem $places -Recurse -Include Notes.ini | ForEach-Object {
  Add-Content $_.FullName -Value $lines
  'Processed: {0}' -f $_.FullName
}

В более ранних версиях вы можете использовать Out-File с параметром -Append. Обратите внимание, что вам также необходимо определить кодировку, если файл не закодирован в Unicode.

$places = 'h:\test'
$lines  = 'IM_DISABLED', 'IM_NO_SETUP=1'
Get-ChildItem $places -Recurse -Include Notes.ini | ForEach-Object {
  Out-File $_.FullName -InputObject $lines -Append -Encoding Ascii
  'Processed: {0}' -f $_.FullName
}

Другой вариант — создать массив вывода Get-Content и строк, которые вы хотите добавить, и записать их обратно в файл с Set-Content:

$places = 'h:\test'
Get-ChildItem $places -Recurse -Include Notes.ini | ForEach-Object {
  $f = $_.FullName
  (Get-Content $f), 'IM_DISABLED', 'IM_NO_SETUP=1' | Set-Content $f
  'Processed: {0}' -f $f
}
person Ansgar Wiechers    schedule 28.01.2016