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的
由于
答案 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