Powershell 将目录中的TXT文件合并为一个文件,并在文件名末尾添加一列

Powershell 将目录中的TXT文件合并为一个文件,并在文件名末尾添加一列,powershell,copy,Powershell,Copy,我有一组txt文件在一个目录中,我想合并在一起 所有txt文件的内容格式如下所示: IPAddress Description DNSDomain --------- ----------- --------- {192.168.1.2} Microsoft Hyper-V Network Adapter {192.168.1.30} Microsoft Hyper-V Network Adapter #2 从这个a

我有一组txt文件在一个目录中,我想合并在一起

所有txt文件的内容格式如下所示:

IPAddress Description DNSDomain --------- ----------- --------- {192.168.1.2} Microsoft Hyper-V Network Adapter {192.168.1.30} Microsoft Hyper-V Network Adapter #2
从这个all.txt文件中,我看不出哪些行来自哪个txt文件。关于任何代码位的任何想法,如果这些行来自文件名,则会在结尾txt文件中添加一个额外的列?

根据上面的注释,您已将
格式表的输出放入文本文件中。请注意,
Format Table
可能在屏幕上以可视方式构建,但只是一行行文本。这样做会使处理数据变得更加困难

如果您只想从
Get WMIObject
cmdlet的结果中获得一些属性,请使用
Select Object
,它(在此处给出的用法中)将有效地过滤数据以获得所需的属性

您可以通过写入结构化文件(即CSV)来保留数据的表格性质,而不是将文本写入简单文件:

请注意,我们能够在每行数据中包含PScomputerName属性,有效地为您提供所需的额外数据列

获取原始数据到此为止。您可以读入所有CSV数据并再次将其写出的一种方法可能如下所示:

Get-ChildItem *.csv -Exclude all.csv |
    Foreach-Object {Import-Csv $_} |
    Export-Csv all.csv
Get-ChildItem *.txt -Exclude all.txt |
    Foreach-Object {Get-Content $_ -Raw} |
    Out-File all.txt
请注意,我们在初始cmdlet中排除了输出文件,以避免无休止地将form/读写到同一文件中

如果您没有足够的时间再次收集数据,则需要将文件假脱机在一起。通过
获取内容
将文件假脱机在一起,如下所示:

Get-ChildItem *.csv -Exclude all.csv |
    Foreach-Object {Import-Csv $_} |
    Export-Csv all.csv
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
    }
}

如果您没有使用Format Table/Out字符串损坏数据,您可以在生成这些文件的脚本中为服务器名称添加属性。(然后将它们全部放入一个CSV中)。如果可能的话,返回并编辑该脚本,使其输出正确的数据或易于处理的数据,这是生成输出文件的powershell,您可以看到:Get-WmiObject-Class Win32_NetworkAdapterConfiguration-Filter IPEnabled=TRUE-ComputerName ServerName here | Format Table-Property IPAddress,Description,DNSDomain | Out文件c:\temp\server.txt无需添加文件名列。
all.txt
的全部内容来自通配符模式
*.txt
枚举的最后一个文件,因为
copy*.txt all.txt
根本无法按您想象的方式工作。替换
格式表…|输出文件…
使用
选择对象PSComputerName、IPAddress、Description、DNSDomain |导出Csv“C:\temp\server.Csv”