2017-03-05 100 views
2

一個很好的艱難的一個爲你更換所有在指定日期範圍內的文件字符串。我試圖在一堆文件中查找並替換給定的字符串。這些文件有文件名中的日期戳即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陣列我已經爲日期範圍的文件搜索掩碼創建的子項,並找到所有比賽。在一個變量存儲這個與新的字符串$Newfilenamereal替換字符串$filename

$Matches1 = get-childitem $files1 | select-string $Filename | foreach-object {$_ -replace $Filename,$Newfilenamereal} | out-string 

write-host $Matches1 

但是我不知道如何來覆蓋什麼已經發現並在$Matches1變量的原始文件替換。我曾嘗試set-content,但是這隻會要麼刪除的日期標記的文件我的一切都還是無法理解$files1數組作爲文件路徑。

所以我的問題給你可愛的人是怎麼做的我寫的是我的環境已經取代實際的文件嗎?

+0

你要重命名的文件嗎? –

+0

沒有,只有在匹配的文件 – user6705306

回答

2

使用Get-Content cmdlet的只是檢索文件內容和替換字符串。最後,寫回使用Set-Content的cmdlet:

Get-ChildItem $files1 | ForEach-Object { 
    ($_ | Get-Content -Raw) -replace $Filename,$Newfilenamereal | 
     Set-Content -Path $_.FullName -Encoding UTF8 
} 
+0

這是完美的找到了匹配的字符串,太感謝你了。你能一步一步解釋一下嗎?我不完全瞭解它 – user6705306

+0

對不起,從我的電話寫信。第一個get-childitem cmdlet可能已過時。所以我遍歷這些文件並使用get-content cmdlet加載內容。然後使用替換內容替換。最後,將新內容傳送到set-content cmdlet並將其寫回 –