2

У меня есть два CSV-файла с FileCount и Foldersize одинаковых папок, взятых в разное время. (Те же заголовки, те же строки и столбцы. Единственная разница между этими двумя файлами - это значения количества файлов и размера папки)

Мне нужно сравнить два и сообщить о вложенных папках с самым большим изменением в количестве файлов и самым большим изменением в размере папок.

выдержка из CSV ниже.

CSV1

Directory         FileCount   FolderSize
D:\test\Documents   61         18.75
D:\test\Media       61         67,488.43
D:\test\Photos      53         7.88

CSV2

Directory         FileCount   FolderSize
D:\test\Documents   61        18.75
D:\test\Media       59        62,192.40
D:\test\Photos      32        6.51

Пока у меня есть ниже, но он выводит точную копию CSV1, не внося изменения, которые я имею в цикле do. Что я делаю неправильно?

#Importing CSV files
$CSV1 = Import-Csv -Path D:\test\folderstat1.csv
$CSV2 = Import-Csv -Path D:\test\folderstat2.csv

#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $csv1 Filecount and foldersize to the difference between the row in CSV1 #and CSV2
do{
$csv1.filecount[$count] = $csv1.filecount[$count] - $csv2.filecount[$count]
$csv1.FolderSize[$count] = $csv1.FolderSize[$count] - $csv2.FolderSize[$count]
    $count++
}until($count -eq $end)

$CSV1 | export-csv D:\test\out.csv -NoTypeInformation

1 ответ1

0

Вы неправильно размещаете индекс. Пытаться:

$csv1[$count].filecount -= $csv2[$count].filecount
$csv1[$count].FolderSize-= $csv2[$count].FolderSize

Или создайте новый CSV3

## Q:\Test\2018\06\01\SU_1327671.ps1
#Importing CSV files
$CSV1 = Import-Csv -Path "D:\test\folderstat1.csv"
$CSV2 = Import-Csv -Path "D:\test\folderstat2.csv"
#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $CSV3 Filecount and foldersize to the difference between the row in CSV1 #and CSV2

$CSV3 = do{
    [PSCustomObject]@{
        Directory =  $csv1[$count].Directory
        Filecount = ($csv1[$count].filecount  - $csv2[$count].filecount)
        FolderSize= ($csv1[$count].FolderSize - $csv2[$count].FolderSize)
    }
    $count++
} until($count -eq $end)
$CSV3 | Export-Csv "D:\test\out.csv" -NoTypeInformation

"=" * 50

$CSV3 | Sort {[Math]::Abs($_.FolderSize)} -Desc | Select -First 1|
    ForEach{"Largest (absolute) change {0} in {1}" -f $_.FolderSize,$_.Directory}

Образец вывода:

> . .\SU_1327671.ps1
==================================================
Largest (absolute) change 5296 in D:\test\Media

> import-csv .\out.csv

Directory         Filecount FolderSize
---------         --------- ----------
D:\test\Documents 0         0
D:\test\Media     2         5296
D:\test\Photos    21        1,37

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .