2011-01-13 9 views
2

Ich habe fünf .SQL-Dateien und kenne den Namen jeder Datei. In diesem Beispiel nennen Sie sie one.sql, two.sql, three.sql, four.sql und five.sql. Ich möchte den Text aller Dateien anhängen und eine Datei namens master.sql erstellen. Wie mache ich das in PowerShell? Fühlen Sie sich frei, mehrere Antworten auf dieses Problem zu veröffentlichen, da ich sicher bin, dass es mehrere Möglichkeiten gibt, dies zu tun.Mit PowerShell, mehrere bekannte Dateinamen lesen, Text aller Dateien anhängen, erstellen und in eine Ausgabedatei schreiben

Mein Versuch funktioniert nicht und erstellt eine Datei mit mehreren hunderttausend Zeilen.

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 

Antwort

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

Beachten Sie, dass >-Out-File -Encoding Unicode entspricht. Ich neige dazu, Out-File zu verwenden, wenn ich eine andere Kodierung angeben muss.

+0

Beschleunigen Sie es, indem Sie das '-Delimiter ([char] 0)' (setzen Sie das Trennzeichen auf ein Zeichen, das nicht in der Datei ist, zB: das Nullzeichen oder zumindest '-ReadCount 0') für Get verwenden -Content, also lesen und schreiben Sie ganze Dateien auf einmal statt Zeile für Zeile – Jaykul

+0

@Jaykul Oder in PowerShell V3 verwenden Sie "Get-Content-Raw". –

1

sehen, ob das funktioniert besser

get-childitem "one.sql", "two.sql", "three.sql", "four.sql", "five.sql" | Get-Inhalt | out-Datei -encoding UNICODE Master.sql

0

denke ich, logischer Weg, dies zu lösen, ist Add-Content verwenden

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

hovewer Get-Content ist in der Regel sehr langsam, wenn mehrere sehr große Dateien zu lesen. Wenn es Ihr Fall könnte dieser Artikel helfen: http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!756.entry

4

Es gibt hier ein paar gute Antworten, aber wenn Sie eine ganze Menge von Dateien und vielleicht wissen Sie nicht alle Namen das ist, was ich kam mit:

$vara = get-childitem -name "path" 

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

Beispiel

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

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

Sie können natürlich Rohr dies direkt in | add-content oder was auch immer, aber ich mag in Variablen erfassen, damit ich später manipulieren kann.

0

Was:

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

ich etwas Ähnliches benötigt, Chris Berry Beitrag geholfen, aber ich denke, das effizienter ist:

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

Der erste Teil gci -name "*PathToFiles*" Sie Liste Dateien bekommt. Dies kann mit Platzhaltern gemacht werden, um nur Ihre .sql-Dateien zu erhalten, d. H. gci -name "\\share\folder\*.sql"

Dann pipes zu Get-Content und leitet die Ausgabe an Ihre master.sql-Datei um. Wie von Kieth Hill erwähnt, können Sie Out-File anstelle von> verwenden, um Ihre Ausgabe bei Bedarf besser zu steuern.

Verwandte Themen