我正在嘗試執行遞回搜索,將檔案合并到找到檔案的目錄中的單個檔案中。查找名為 Dexis_Conflit_(*).dat 的檔案并合并,或創建一個名為 dexis.dat 的檔案。.dat 檔案是純文本。我需要找到數千個檔案夾并將這些檔案合并到其中。我有一個基本的 PowerShell 代碼,可以找到所有檔案及其相應的檔案夾,但我無法弄清楚如何將它們全部合并到正確的單個檔案中目錄。
Get-ChildItem -File -Include "dexis_conflict_(*).dat" -Path D:\apps\dexis\data -Recurse -OutVariable DEXIS.dat
我嘗試過使用 Out-File、Set-Content、Add-Content 和 foreach,但我無法弄清楚。任何幫助將不勝感激。
編輯:大多數 95% 的檔案夾中已經有一個 dexis.dat 檔案。所有“沖突”檔案都需要合并到主 dexis.dat 檔案中。那些沒有 dexis.dat 檔案的檔案夾,需要創建它并將沖突檔案合并到其中。
uj5u.com熱心網友回復:
與往常一樣,使用 PowerShell 有很多方法可以解決這個問題,所以這是我的看法:
Get-ChildItem -Path "D:\apps\dexis\data" -Filter "dexis_conflict_(*).dat" -File -Recurse |
ForEach-Object -Begin {
$saveTo = "DEXIS.dat"
} -Process {
$parentPath = Resolve-Path $_.PSParentPath -Relative
$jointPath = Join-Path -Path $parentPath -ChildPath $saveTo
if (-not (Test-Path -Path $jointPath)) {
New-Item -Path $jointPath | Out-Null
}
Get-Content -LiteralPath $_.FullName | Add-Content -LiteralPath $jointPath
}
鑒于您的檔案只是純文本檔案,因此不需要使用特定的檔案編碼(例如位元組),但如果需要,仍然可以使用該選項。除此之外,其余的都很簡單。使用Resolve-Path我們可以擺脫 PowerShell 添加到父路徑的不需要的前置文本。然后,使用Join-Path我們可以創建.\.\DEXIS.dat我們可以測驗的檔案路徑。這是可行的,因為 PowerShell 在移動到下一個子檔案夾之前一次處理每個目錄中的檔案。
所以...
- 測驗是否
dexis.dat存在,如果不存在,則創建檔案。 - 如果檔案確實存在,只需將每個
dexis_conflict_(*).dat檔案的內容附加到它使用Add-Content.
現在,每個目錄都應該有一個DEXIS.dat檔案,其中包含來自檔案名的合并內容dexis_conflict_(*).dat。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466227.html
