我有一个PowerShell脚本,我想运行它来添加两行' IM_DISABLED' &安培; ' IM_NO_SETUP = 1'到每个INI文件的末尾。
我想针对文件夹H:\test
运行它,该文件夹的子文件夹各包含一个文件notes.ini
。
我有以下使用-replace
工作的PowerShell。但是,我无法使用替换,只需要在每个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
}
答案 0 :(得分:2)
如果你有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
}