82343
iperfというツールを使いスループットを確認していますが、  
このツールの出力結果がExcelで処理しにくい出力形式のため困っております。

ツール起動時下記コマンドで実行していますが、せめて、日時を一番左に挿入  
するようなバッチにしたいのですが、何か方法は御座いますでしょうか？

```

    echo %date%%time% >> iperf.log
    
    iperf3.exe -c 192.168.1.2 -t 20 >>iperf.log
    
```

```

    Connecting to host 192.168.1.1, port 5201
    [  4] local 192.168.1.1 port 62946 connected to 192.168.1.2 port 5201
    [ ID] Interval           Transfer     Bandwidth
    [  4]   0.00-1.00   sec  5.00 MBytes  41.9 Mbits/sec                  
    [  4]   1.00-2.01   sec  3.25 MBytes  27.0 Mbits/sec                  
    [  4]   2.01-3.00   sec  15.4 MBytes   130 Mbits/sec                  
    [  4]   3.00-4.01   sec  13.4 MBytes   111 Mbits/sec                  
    [  4]   4.01-5.02   sec  4.00 MBytes  33.4 Mbits/sec                  
    [  4]   5.02-6.02   sec  5.75 MBytes  48.3 Mbits/sec                  
    [  4]   6.02-7.00   sec  8.88 MBytes  75.7 Mbits/sec                  
    [  4]   7.00-8.00   sec  9.62 MBytes  80.5 Mbits/sec                  
    [  4]   8.00-9.01   sec  20.1 MBytes   168 Mbits/sec                  
    [  4]   9.01-10.00  sec  11.8 MBytes  98.8 Mbits/sec                  
    [  4]  10.00-11.01  sec  27.0 MBytes   226 Mbits/sec                  
    [  4]  11.01-12.00  sec  26.2 MBytes   221 Mbits/sec                  
    [  4]  12.00-13.00  sec  28.1 MBytes   236 Mbits/sec                  
    [  4]  13.00-14.00  sec  29.1 MBytes   244 Mbits/sec                  
    [  4]  14.00-15.00  sec  31.2 MBytes   262 Mbits/sec                  
    [  4]  15.00-16.00  sec  30.1 MBytes   253 Mbits/sec                  
    [  4]  16.00-17.00  sec  23.8 MBytes   199 Mbits/sec                  
    [  4]  17.00-18.01  sec  33.0 MBytes   276 Mbits/sec                  
    [  4]  18.01-19.00  sec  31.9 MBytes   268 Mbits/sec                  
    [  4]  19.00-20.00  sec  28.1 MBytes   236 Mbits/sec                  
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth
    [  4]   0.00-20.00  sec   386 MBytes   162 Mbits/sec                  sender
    [  4]   0.00-20.00  sec   386 MBytes   162 Mbits/sec                  receiver
    
```
CC BY-SA 4.0
2021-09-08T02:43:23.303
82331
2021-09-08T14:16:01.183
question
batch-file
バッチファイルの文字列処理と挿入
一度ワークファイルにログを出力し、そのワークファイルの行を日時付きでiperf.logに出力してはいかがでしょうか？

```

    @echo off
    set _DT=%date% %time%
    iperf3.exe -c 192.168.1.2 -t 20 > work.log
    for /f "delims=" %%x in ( work.log ) do (
        echo %_DT% %%x   >>iperf.log
    )
    
    
```
CC BY-SA 4.0
2021-09-08T08:07:21.903
82343
2021-09-08T08:07:21.903
35558
82331
answer
PowerShell には `ConvertFrom-Json` というコマンドレットがありますので、それを使ってみてはどうでしょうか。

##### JSON形式でファイルに出力

```

    iperf3.exe -c 192.168.1.2 -t 20 -J > iperf.json
    
```

**iperf.json**

```

    {
                 :
    
        "intervals":    [{
                "streams":  [{
                        "socket":   5,
                        "start":    0,
                        "end":  1.000136,
                        "seconds":  1.0001360177993774,
                        "bytes":    6138101760,
                        "bits_per_second":  49098135859.606842,
                 :
    
    
```

**PowerShell script**

```

    Get-Content ".\iperf.json" -Encoding UTF8 -Raw |
    ConvertFrom-Json | % { 
      $ctime = [System.DateTimeOffset]::FromUnixTimeSeconds(
        $_.start.timestamp.timesecs).LocalDateTime.ToString(
          "G", [System.Globalization.CultureInfo]::CreateSpecificCulture("ja-JP"))
      $_.intervals.streams | ForEach-Object {
        Write-Output("Datetime,Interval(sec),Transfer(MBytes),Bandwidth(Mbits/sec)")
      }{
        Write-Output(
          "$ctime,{0:f2}-{1:f2},{2:f2},{3:f2}" -f
          $_.start, $_.end,
          ($_.bytes/[math]::Pow(10,6)),
          ($_.bits_per_second/[math]::Pow(10,6))
        )
      }
    } | Out-File ".\iperf.csv" -Encoding UTF8
    
```

**iperf.csv**

Datetime | Interval(sec) | Transfer(MBytes) | Bandwidth(Mbits/sec)  
---|---|---|---  
2021/09/08 18:43:16 | 0.00-1.00 | 6138.10 | 49098.14  
2021/09/08 18:43:16 | 1.00-2.00 | 6094.85 | 48757.37  
2021/09/08 18:43:16 | 2.00-3.00 | 6143.34 | 49153.20  
2021/09/08 18:43:16 | 3.00-4.00 | 6051.59 | 48410.96  
2021/09/08 18:43:16 | 4.00-5.00 | 6121.06 | 48966.44
CC BY-SA 4.0
2021-09-08T08:43:18.677
82344
2021-09-08T09:55:59.130
2021-09-08T09:55:59.130
47127
47127
82331
answer
既に指摘されているように`iperf3`にはJSON出力を行う`-J`オプションが用意されています。  
また、ExcelにはPower
Queryと言って外部データを処理しテーブルとして取り込む機能が用意されています。これを使うことでJSONファイルを読み込むことができます。

Excelで [データ] - [データの取得] - [その他のデータソースから] - [空のクエリ] を実行するとPower
Queryエディターが立ち上がります。  
Power Queryエディターで [ホーム] - [詳細エディター] に次のコードを入力すると

```

    let
        json = Json.Document(File.Contents("C:\Path\To\iperf.json")),
        epoch = DateTimeZone.ToLocal(#datetimezone(1970, 1, 1, 0, 0, 0, 0, 0)),
        startTime = epoch + #duration(0, 0, 0, json[start][timestamp][timesecs]),
        list = List.TransformMany(json[intervals], each [streams], (x, y) => [date = startTime] & y),
        table = Table.FromRecords(list)
    in
        table
    
```

Power Queryエディターにテーブルが読み込まれます。ここで [ホーム] - [閉じて読み込む] でExcelにテーブルが読み込まれます。
CC BY-SA 4.0
2021-09-08T14:16:01.183
82356
2021-09-08T14:16:01.183
4236
82331
answer