使用Powershell处理多个csv文件并将数据存储在单独的文本文件中(删除空格和换行)

时间:2019-03-22 06:28:06

标签: windows powershell powershell-v2.0 powershell-v3.0

我正在努力使此脚本正常工作。

我正在尝试使用Powershell处理所有csv文件(一次处理一个),并将每个csv文件另存为单独的文本文件。

在文本文件中,我希望将所有IP放在一行中并以逗号分隔(例如192.168.73.44、192.168.75.224、192.168.76.45、192.168.77.105、192.168.77.237、192.168.78.33 ,192.168.78.92)

因此,此脚本应从特定的csv文件中提取每个ipv4address列值,并在每个IP地址之后添加一个逗号“,”并将该特定的csv中的所有IP附加到文本文件中。

我的脚本正在处理csv并生成文本文件,但是它只是将csv中找到的第一个IP写入文本文件。

您能在这里帮我吗?

Get-ChildItem C:\Temp\Qualys\All\AssetGroups\*.csv | Foreach-Object {

  $basename = $_.Name

  $detail = import-csv $_ 

 foreach ($csv in $detail) { 

 $Outputs =@()
 $field = $csv.ipv4address

 $field = $field + ","
 $Outputs +=$field 

 } 

$Outputs | Out-File "C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt"

$regexA = "(\s,)"

$regexB = "\s" 

(Get-Content C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt | Out-String) -replace $regexA,' ' -replace "`r?`n(?!`r?`n)"  -join ' ' -replace $regexB, ''|

Set-Content C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt

$b = Get-Content -Path C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt
@(ForEach ($a in $b) {$a.Replace(' ', '')}) > C:\Temp\Qualys\All\AssetGroups\Textfiles\$basename.txt
}

IPs.csv

1 个答案:

答案 0 :(得分:0)

查看您的CSV文件后,我认为这将更易于重写。跟您所做的相比,遵循它要容易得多。

$skips = $null, '', ' '
Get-ChildItem C:\Temp\Qualys\All\AssetGroups\*.csv| ForEach-Object {
    $csv = import-csv $_.FullName
    $IPArray = @()
    Foreach($ip in $csv) {
        if(!($ip.ipv4address -in $skips)) {
            $IPArray += $ip.ipv4address
        }
    }
    $IPArray -join ','| Out-File C:\Temp\Qualys\All\AssetGroups\Textfiles\$($_.BaseName).txt
}