powershell - 连接N个文本文件并在每行前加上文件名

时间:2013-09-10 16:46:38

标签: powershell text

Powershell - 简单的问题。

我想连接N个文本文件并在每行前加上文件名。怎么做但有完整的路径+文件名?每个文件应按原样保留所有文本和行终止符。

DATA1.TXT

this is the text in
data1 file - hello

data2.txt

four score and
seven years ago

获取此文件

output.txt的

data1.txt: this is the text in
data1.txt: data1 file - hello
data2.txt: four score and
data2.txt: seven years ago

这将是这样的 - 但这确实有效。

get-content c:\ temp \ data * .txt | foreach-object {$ tmp = get-content $ ; $ .basename +“,”+ $ tmp}> output.txt的

由于

3 个答案:

答案 0 :(得分:4)

尝试这样的事情:

$path = "c:\temp"
$out  = "c:\temp\output.txt"

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}

答案 1 :(得分:1)

试试这个:

Select-String '^' data*.txt >output.txt

如果您不想要行号,请将其删除,如下所示:

(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt

编辑:如果您只想要没有路径的文件名,可以删除前导路径以及行号,如下所示:

(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt

或者您可以从MatchInfo对象的Select-String对象的属性构造输出:

Select-String '^' data*.txt | % { "{0}:{1}" -f $_.Filename, $_.Line } >output.txt

答案 2 :(得分:0)

这个对我有用:

ls c:\temp\data*.txt | foreach-object { $fname=[System.IO.Path]::GetFileName($_); get-content $_ | foreach-object { echo $fname": "$_ >> output.txt}}

如果您需要再次运行它或者需要添加新数据,请确保删除output.txt。

从上面使用的输入,output.txt:

PS C:\> cat .\temp\output.txt
data1.txt: this is the text in
data1.txt: data1 file - hello
data2.txt: four score and
data2.txt: seven years ago