powershell-将N个文本文件连接起来,并将文件名前置到每行

powershell-将N个文本文件连接起来,并将文件名前置到每行,powershell,text,Powershell,Text,Powershell-简单的问题 我想将N个文本文件连接起来,并在每一行前加上文件名。如何做相同的,但有完整的路径+文件名?每个文件都应保留所有文本和行终止符 data1.txt data2.txt 要获取此文件 output.txt 它将是这样的-但实际上是有效的 获取内容c:\temp\data*.txt | foreach对象{$tmp=get content$;$.basename+,“+$tmp}>output.txt 谢谢这个对我很有用: ls c:\temp\data*.txt |

Powershell-简单的问题

我想将N个文本文件连接起来,并在每一行前加上文件名。如何做相同的,但有完整的路径+文件名?每个文件都应保留所有文本和行终止符

data1.txt

data2.txt

要获取此文件

output.txt

它将是这样的-但实际上是有效的

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


谢谢

这个对我很有用:

ls c:\temp\data*.txt | foreach-object { $fname=[System.IO.Path]::GetFileName($_); get-content $_ | foreach-object { echo $fname": "$_ >> output.txt}}
如果需要再次运行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

这一个对我有用:

ls c:\temp\data*.txt | foreach-object { $fname=[System.IO.Path]::GetFileName($_); get-content $_ | foreach-object { echo $fname": "$_ >> output.txt}}
如果需要再次运行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

试着这样做:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt

试着这样做:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt
试试这个:

Select-String '^' data*.txt >output.txt
如果不需要行号,请按如下方式删除它们:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt
编辑:如果只需要文件名而不需要路径,可以删除前导路径和行号,如下所示:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt
或者,您也可以从
MatchInfo
对象
Select字符串
生成的属性构造输出:

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

Select-String '^' data*.txt >output.txt
如果不需要行号,请按如下方式删除它们:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt
编辑:如果只需要文件名而不需要路径,可以删除前导路径和行号,如下所示:

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

Get-ChildItem $path -Filter data*.txt | % {
    $file = $_.Name
    Get-Content $_.FullName | % {
        "${file}: $_" | Out-File -Append $out
    }
}
(Select-String '^' data*.txt) -replace '^([^:]*:)\d+:','$1' >output.txt
(Select-String '^' data*.txt) -replace '^(.:[^:]*\\)?([^:]*:)\d+:','$2' >output.txt
或者,您也可以从
MatchInfo
对象
Select字符串
生成的属性构造输出:

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

我应该包括我在Windows中使用的Powershell ISE。我应该包括我在Windows中使用的Powershell ISE。(选择字符串“^”$input)-替换“([^:]*:)\d+:”,“$1”>$output省略一个“^”完成了操作。但是如何去掉路径?谢谢Ansgar,但我肯定错过了一些东西。上面的语法都没有给我留下任何线索。第三个代码示例中有一个错误(现已修复),但第四个应该可以正常工作。如果对您不起作用,请提供证据。(选择字符串“^”$input)-replace“([^:::*:)\d+:”,“$1”>$output去掉一个“^”就成功了。但是如何去掉路径?谢谢Ansgar,但我肯定错过了一些东西。上面的语法都没有给我留下任何线索。第三个代码示例中有一个错误(现已修复),但第四个应该可以正常工作。如果它不适合您,请提供证据。回答很好,但是如果当前工作目录不是c:\temp,它可能会失败<代码>获取内容$\全名可能会更健壮一些。@Matt谢谢Matt!我已经用你的建议更新了答案。答案不错,但是如果当前工作目录不是c:\temp,它可能会失败<代码>获取内容$\全名可能会更健壮一些。@Matt谢谢Matt!我已经用你的建议更新了答案。