2011-01-13 32 views
2

我有五個.sql文件並知道每個文件的名稱。在這個例子中,將它們稱爲one.sql,two.sql,three.sql,four.sql和five.sql。我想附加所有文件的文本並創建一個名爲master.sql的文件。我如何在PowerShell中執行此操作?隨意發佈多個答案,因爲我確信有幾種方法可以做到這一點。使用PowerShell,讀取多個已知文件名,附加所有文件的文本,創建並寫入一個輸出文件

我的嘗試不起作用,並創建了數十萬行的文件。

PS C:\sql> get-content '.\one.sql' | get-content '.\two.sql' | get-content '.\three.sql' | get-content '.\four.sql' | get-content '.\five.sql' | out-file -encoding UNICODE master.sql 

回答

7
Get-Content one.sql,two.sql,three.sql,four.sql,five.sql > master.sql 

注意>相當於Out-File -Encoding Unicode。當我需要指定不同的編碼時,我只傾向於使用Out-File。

+0

通過指定`-Delimiter([char] 0)`(將分隔符設置爲不在文件中的某個字符,例如:空字符,或者至少使用'-ReadCount 0')來加快獲取速度 - 內容,從而一次讀取(和寫入)整個文件,而不是一行一行 – Jaykul 2011-01-13 19:08:14

1

看是否有此效果更好

的get-childitem 「one.sql」, 「two.sql」, 「three.sql」, 「four.sql」, 「five.sql」 | get-content |出文件-encoding UNICODE master.sql

0

我認爲解決這一邏輯的方法是使用添加內容

$files = Get-ChildItem '.\one.sql', '.\two.sql', '.\three.sql', '.\four.sql', '.\five.sql' 
$files | foreach { Get-Content $_ | Add-Content '.\master.sql' -encoding UNICODE } 

hovewer獲取內容讀取多個非常大的文件時通常很慢。如果這是你的情況下,這篇文章可以幫助:http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!756.entry

4

有一些很好的答案在這裏,但如果你有一大堆的文件,也許你不知道所有的名字,這是我想出了:

$vara = get-childitem -name "path" 

$varb = foreach ($a in $vara) {gc "path\$a"} 

例如

$vara = get-childitem -name "c:\users\test" 

$varb = foreach ($a in $vara) {gc "c:\users\test\$a"} 

可以很明顯的管這直接進入| add-content或什麼,但我喜歡在變量捕捉,所以我可以操縱以後。

0

關於什麼:

Get-Content .\one.sql,.\two.sql,.\three.sql,.\four.sql,.\five.sql | Set-Content .\master.sql 
0

我需要類似的東西,克里斯·貝瑞的崗位幫助,但我認爲這是更有效的:

gci -name "*PathToFiles*" | gc > master.sql 

第一部分gci -name "*PathToFiles*"讓你的文件列表中。這可以通過使用通配符來獲得.sql文件,例如:gci -name "\\share\folder\*.sql"

然後管道到Get-Content並將輸出重定向到您的master.sql文件。正如Kieth Hill所指出的那樣,如果需要,您可以使用Out-File來代替>以更好地控制輸出。

相關問題