对你们所有人来说都是一个非常艰难的。我正在尝试查找并替换一堆文件中的给定字符串。这些文件在文件名中有一个日期戳,即YYYY_MM_DD_file.txt
我希望在这些文件的日期范围内搜索和替换然后替换我定义的字符串,我不能使用日期修改为日期范围,我必须依赖文件名中的标记。
到目前为止,我在WPF文本字段中设置了日期范围:
$Filename = $Filenamebox.text
$startdate = [datetime] $startdatetext.text
$enddate = [datetime] $enddatetext.Text
$NewFilenamereal = $Newfilename.Text
$array =
do {
$startdate.ToString('yyyy_MM_dd*')
$startdate = $startdate.AddDays(1)
}
until ($startdate -gt [datetime] $enddate)
$files1 = $array | foreach-object {"C:\Users\michael.lawton\Desktop\KGB\Test folder\$_"}
write-host $files1
然后,我使用我创建的$files1
数组作为日期范围内文件的搜索掩码获取子项,并查找所有匹配项。将其存储在变量中,并将字符串$filename
替换为新字符串$Newfilenamereal
。
$Matches1 = get-childitem $files1 | select-string $Filename | foreach-object {$_ -replace $Filename,$Newfilenamereal} | out-string
write-host $Matches1
但是我无法弄清楚如何覆盖$Matches1
变量中找到和替换原始文件的内容。我尝试了set-content
,但这只会删除我在日期标记文件中的所有内容,或者无法将$files1
数组理解为文件路径。
所以我向你们提出的问题是,如何将我在环境中替换的内容写入实际文件?
答案 0 :(得分:2)
使用Get-Content
cmdlet检索文件内容并替换字符串。最后使用Set-Content
cmdlet将其写回:
Get-ChildItem $files1 | ForEach-Object {
($_ | Get-Content -Raw) -replace $Filename,$Newfilenamereal |
Set-Content -Path $_.FullName -Encoding UTF8
}