1

Powershell - 简单的问题。

我想连接 N 个文本文件并将文件名添加到每一行。如何做同样的事情但有完整的路径+文件名?每个文件都应按原样保留所有文本和行终止符。

数据1.txt

this is the text in
data1 file - hello

数据2.txt

four score and
seven years ago

获取此文件

输出.txt

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

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

获取内容 c:\temp\data*.txt|foreach-object{$tmp=get-content $ ;$ .basename+","+$tmp} > output.txt

谢谢

4

3 回答 3

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
    }
}
于 2013-09-10T17:05:45.053 回答
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
于 2013-09-10T17:29:00.827 回答
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
于 2013-09-10T17:04:34.193 回答