按文件名查找并替换给定日期范围内的文件中的字符串

时间:2017-03-05 19:22:59

标签: powershell date-range cmdlets

对你们所有人来说都是一个非常艰难的。我正在尝试查找并替换一堆文件中的给定字符串。这些文件在文件名中有一个日期戳,即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数组理解为文件路径。

所以我向你们提出的问题是,如何将我在环境中替换的内容写入实际文件?

1 个答案:

答案 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
}