2011-01-13 38 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来代替>以更好地控制输出。

相关问题