Есть папка, которая содержит более 1000 заархивированных файлов. Каждый заархивированный файл содержит 12 других заархивированных файлов, каждый из которых содержит по одному файлу CSV. Мне нужно подсчитать общее количество строк всех файлов...
Это можно сделать с помощью Windows PowerShell, но у меня проблемы с тем, чтобы разархивировать файлы, подсчитать количество строк и снова заархивировать, чтобы сэкономить место на диске во время процесса.
$folderPath="C:\_Unzip_Folder";
Get-ChildItem $folderPath -recurse | %{
if($_.Name -match "^*.`.zip$")
{
$parent="$(Split-Path $_.FullName -Parent)";
write-host "Extracting $($_.FullName) to $parent"
$arguments=@("e", "`"$($_.FullName)`"", "-o`"$($parent)`"");
$ex = start-process -FilePath "`"C:\Program Files\7-Zip\7z.exe`"" -ArgumentList $arguments -wait -PassThru;
if( $ex.ExitCode -eq 0)
{
write-host "Extraction successful, deleting $($_.FullName)"
rmdir -Path $_.FullName -Force
}
}
}
Get-ChildItem $folderPath -recurse -Filter *.csv | %{
Get-Content $($_.FullName) | Measure-Object -Line
}
cmd /c pause | out-null
Теперь он считает строки, но может быть проще, если он СУММУЛИРУЕТ их мне.
Кто-нибудь может помочь мне с этой задачей?
Спасибо вам всем.
foreach
, напримерforeach($file in $(gci C:\_Unzip_Folder)){if ($file.extension -eq ".csv"){foreach ($line in $(get-content $file.fullname)){$i++}}
. - person Nico Nekoru   schedule 07.06.2020foreach -?
- person Nico Nekoru   schedule 08.06.2020Get-Content $($_.FullName) | Measure-Object –Line
после инструкцииWrite-host "Extraction successful ....
. Командлет Measure-Object подсчитывает количество строк в файле, если вы передаете ему параметр-Line
. - person krokodilko   schedule 08.06.2020$(Get-Content $($_.FullName)).count
, и результат будет таким же. Вы можете просмотреть файлы в папке и выполнить$var += $(Get-Content $($_.FullName)).count
, чтобы добавить счетчики к переменной. - person Nico Nekoru   schedule 08.06.2020foreach($file in $(gci C:\_Unzip_Folder)){if ($file.extension -eq ".csv"){$var += $(Get-Content $($file.FullName)).count}}
- person Nico Nekoru   schedule 08.06.2020