我在一个目录中有一组txt文件,我想合并在一起。
所有txt文件的内容格式如下:
IPAddress Description DNSDomain --------- ----------- --------- {192.168.1.2} Microsoft Hyper-V Network Adapter {192.168.1.30} Microsoft Hyper-V Network Adapter #2
我有以下代码,它将所有txt文件合并到一个名为all.txt的txt文件中。
copy *.txt all.txt
从这个all.txt我看不出来自什么行的txt文件。关于任何代码位的任何想法都会在末尾txt文件中添加一个额外的列,其中包含行的文件名?
答案 0 :(得分:1)
根据上面的评论,您已将Format-Table
的输出放入文本文件中。请注意,Format-Table
可能在屏幕上以直观结构化,但只是文本行。通过这样做,您使得处理数据变得更加困难。
如果您只想从Get-WMIObject
cmdlet的结果中获取一些属性,请使用Select-Object
(在此处给出的用法中)将有效地过滤所需属性的数据。
您可以通过写入结构化文件(即CSV)来保留数据的表格性质,而不是将文本写入简单文件:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName SERVERNAMEHERE |
Select-Object PSComputerName, IPAddress, Description, DNSDomain |
Export-Csv 'C:\temp\server.csv'
请注意,我们能够在每行数据中包含 PScomputerName 属性,从而有效地为您提供所需的额外数据列。
获取原始数据非常重要。您可以读取所有CSV数据并将其再次写出的一种方法可能如下所示:
Get-ChildItem *.csv -Exclude all.csv |
Foreach-Object {Import-Csv $_} |
Export-Csv all.csv
请注意,我们会在初始cmdlet中排除输出文件,以避免无休止地读取/写入同一文件。
如果您无法再次收集数据,则需要将文件整理在一起。使用Get-Content
完成假脱机文件,如下所示:
Get-ChildItem *.txt -Exclude all.txt |
Foreach-Object {Get-Content $_ -Raw} |
Out-File all.txt
在您的情况下,您希望为每行添加后缀,因为您需要逐行处理文件:
$files = Get-ChildItem *.txt
foreach($file in $files) {
$lines = Get-Content $file
foreach($line in $lines) {
"$line $($file.Name)" | Out-File all.txt -Append
}
}