使用PowerShell,读取多个已知文件名,附加所有文件的文本,创建和写入一个输出文件

时间:2011-01-13 15:54:04

标签: powershell

我有五个.sql文件,知道每个文件的名称。对于此示例,将它们称为one.sql,two.sql,three.sql,four.sql和five.sql。我想附加所有文件的文本并创建一个名为master.sql的文件。我如何在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 个答案:

答案 0 :(得分:9)

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

请注意,>相当于Out-File -Encoding Unicode。当我需要指定不同的编码时,我只倾向于使用Out-File。

答案 1 :(得分: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或其他什么,但我喜欢在变量中捕获,以便稍后我可以操作。

答案 2 :(得分:1)

看看这是否效果更好

get-childitem“one.sql”,“two.sql”,“three.sql”,“four.sql”,“five.sql”|获取内容| out-file -encoding UNICODE master.sql

答案 3 :(得分:0)

我认为解决这个问题的合理方法是使用Add-Content

$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在读取多个非常大的文件时通常非常慢。如果是您的情况,本文可以提供帮助:http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!756.entry

答案 4 :(得分:0)

怎么样:

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

答案 5 :(得分:0)

我需要类似的东西,Chris Berry的帖子有帮助,但我认为这更有效:

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

第一部分gci -name "*PathToFiles*"为您提供文件列表。这可以使用通配符来获取.sql文件,即gci -name "\\share\folder\*.sql"

然后管道到Get-Content并将输出重定向到master.sql文件。如Kieth Hill所述,您可以使用Out-File代替>如果需要,可以更好地控制输出。

答案 6 :(得分:0)

这是我如何连接Sql文件夹中的sql文件:

for k,v in my_dict.items():
    my_dict[k] = tuple([0.3*x for x in v])
return my_dict