这是我要修改的文本文件:
Sometext 2016 Sometext Sometext 6 Sometext
我要修改的两个值是第2行和第5行(索引1和4),它们是当前年份和当前月份。
所以我做了这个PowerShell脚本:
$file = "$PSScriptRoot\myFile.txt"
$date = Get-Date
$year = $date.Year
$month = $date.Month
$oldYear = Get-Content $file | Select -Index 1
$oldMonth = Get-Content $file | Select -Index 4
(Get-Content $file).Replace($oldYear, $year) | Set-Content $file
(Get-Content $file).Replace($oldMonth, $month) | Set-Content $file
但显然,这一行
(Get-Content $file).Replace($oldMonth, $month) | Set-Content $file
将取代所有" 6"在我当前月份的文件中(当我写这些行时是7),但我只想要替换第5行,而不是第2行。
答案 0 :(得分:5)
您不需要用新值替换旧值,而是可以通过索引选择适当的行并只替换值:
$content = Get-Content $file
$content[1] = (Get-Date).Year
$content[4] = (Get-Date).Month
$content | Set-Content $file
请注意,Set-Content
cmdlet可能会更改文件编码。
答案 1 :(得分:1)
如果有问题的两行是唯一包含数字的行,则可以使用带有正则表达式的switch
语句:
$file = "$PSScriptRoot\myFile.txt"
(Get-Content $file) | ForEach-Object {
switch -regex ($_) {
'^\d$' { (Get-Date).Month }
'^\d{4}$' { (Get-Date).Year }
default { $_ }
}
} | Set-Content $file