none
Powershell группировка файлов и папок по определенному общему обьему RRS feed

  • Вопрос

  • Здравствуйте!

    Сразу скажу что я небольшой знаток Poweshell, я только учусь))). Я был бы оч благодарен если ктото поможет.

    Задача:

    Есть папка в которой лежат архивы. Требуется сгруппировать архивы по общему обьему примерно 4гб и записать путь и имя файлов в текстовые файлы. Например в папке лежат файлы общим обьемом 40гб, значит примерно будет 10 файлов ТХТ.

    это какойто цикл должен быть, но немогу его никак написать, моих знаний увы не хватает!

    заранее Спасибо!

    16 июня 2019 г. 17:57

Ответы

  • Сайт совершенно бесполезный. Все что я получил так это непонятные умнические замашки про алгоритны, шаги и прочую извините чушь! Это мое мнение! Как Вы пишите "Вы, конечно, имеете полное право на меня обидеться за то, что я пишу"!!!

    Я попросил совет-подсказку как мне группировать файлы, а вы оба мне лечите про алгоритмы и прочую ненужную мне чушь. Спасибо и на этом. Складвается ощущение что вы тут только психологией занимаетесь и теорией.

    Я не просил ни выбор алгоритма и ничего подобного, я сформулировал задачу и попросил помочь. Если нет желающих так нефига писать всякое! Перечитайте свои сообщения и подумайте нафига вы на этом сайте! Может вы не программисты вовсе!!!

    Буду искать помощи на других сайтах а у мелкософта одни теоретики! Бесполезный сайт!

    Спасибо за потерю времени!!!

    Пример плохого алгоритма

    Следующей командой создаем тестовые файлы:

    foreach ($i in 1..60){fsutil file createnew "c:\tmp\test\test$i.txt" $($i*1MB)}

    На выходе получим 60 файлов размером от 1 до 60 МБ

    Следующим скриптом перемещаем файлы согласно вашему алгоритму:

    $SrcPath = 'C:\TMP\test\'
    $DstPath = 'C:\TMP\DST'
    
    function Move-ImageToDir {
        param(
            [string]$SrcPath,
            [string]$DstPath,
            $SizeLimit,
            [switch]$EnableLogging
        )
    
        # If destination path does not exist - create it
        if (!(Test-Path $DstPath)){
            New-Item -ItemType Directory -Path $DstPath
        }
        # Get foldername with max number
        $DstCandidate = Get-ChildItem $DstPath -Directory | where {$_.name -match '^\d+$'} | Select FullName,@{n='IntName';e={[int]($_.name)}} | sort IntName | Select -Last 1
        
        if ([string]::IsNullOrEmpty($DstCandidate)){
            # In case if forder with number as a name was not found create first one
            $DstCandidate = "$DstPath\1\"
        } ElseIf ((Test-Path $DstCandidate.fullname) -and (((gci $DstCandidate.fullname -Recurse | Measure-Object -property length -sum).Sum + (Get-Item $SrcPath).Length) -gt $SizeLimit)) {
            # In case if previous used folder have not enough space - use next one
            $DstCandidate = "$DstPath\$($DstCandidate.IntName+1)"
        } Else {
            $DstCandidate = $DstCandidate.Fullname
            Write-Host "Folder exist '$DstCandidate', have enough free space, and will be used as dst dir" -ForegroundColor Green
        }
    
        # If DST folder does not exist - create it 
        If ((! [string]::IsNullOrEmpty($DstCandidate)) -and (! (Test-Path $DstCandidate))){
            New-Item -ItemType Directory -Path $DstCandidate
        } else {
            # Something bad could be here
        }
    
        Write-Host "Moving '$SrcPath' to '$DstCandidate'"
        if ($EnableLogging){
            Write-Host "$SrcPath | Out-File -FilePath ""$DstCandidate\log.txt"" -Append" -ForegroundColor Yellow
            $SrcPath | Out-File -FilePath "$DstCandidate\log.txt" -Append
        }
        Copy-Item -Path $SrcPath -Destination $DstCandidate
        Remove-Item $SrcPath -ErrorAction SilentlyContinue
    }
    
    
    Get-ChildItem $SrcPath -File | sort length | foreach {
        $parameters = @{
            'SrcPath' = $_.FullName;
        }
        switch ($_.Length){
            {$_ -le 4.4MB}{
                $parameters.Add('DstPath', "$DstPath\Images4.4\")
                $parameters.Add('SizeLimit', 4.4MB)
            }
            {($_ -gt 4.4MB) -and ($_ -le 8.4MB)}{
                $parameters.Add('DstPath', "$DstPath\Images8.4\")
                $parameters.Add('SizeLimit', 8.4MB)
            }
            {($_ -gt 8.4MB) -and ($_ -le 24MB)}{
                $parameters.Add('DstPath', "$DstPath\Images24\")
                $parameters.Add('SizeLimit', 24MB)
            }
            {($_ -gt 24MB) -and ($_ -le 50MB)}{
                $parameters.Add('DstPath', "$DstPath\Images50\")
                $parameters.Add('SizeLimit', 50MB)
            }
            {$_ -gt 50MB}{
                $parameters.Add('DstPath', "$DstPath\OtherImages\")
                $parameters.Add('SizeLimit', 1TB)
            }
        }
        Move-ImageToDir -EnableLogging @parameters 
    }
    *Если вам подойдет, то MB на GB можете поменять без проблем

    Результаты заполненности дисков будут в данном тесте порядка 60 - 90%, где 60% будет значить что диск заполнен чуть больше чем на половину.

    Если файлов тысячи или сотни тысяч, алгоритм подобный вашему приведет к тому что ваша компания будет тратить на 30% больше денег чем могла бы.

    В лююлм случае пример я привел, дальше делайте что хотите.


    The opinion expressed by me is not an official position of Microsoft

    23 июня 2019 г. 23:40
    Модератор

Все ответы

  • покажите пример как бы вы решали эту задачу руками

    каковы размеры архивов? если произвольные то папка в 40 гб может содержать архив в 35 гб, 4 гб и 1гб где крайние значения прям сильно не равны 4гб, и что тогда должен сделать скрипт?


    The opinion expressed by me is not an official position of Microsoft


    16 июня 2019 г. 22:56
    Модератор
  • как именно руками я непонял)))

    я пока в начале задачи. да архивы произвольные все именно так как вы написали. опишу поточнее задачу.

    к примеру есть некакая папка "Temp" содержащая архивы.

    $folder = "D:\Temp\"

    $folderSize = (Get-ChildItem $folder -Recurse | Measure-Object -property length -sum)

    Список файлов в папке

    $alle = dir "D:\Temp\" -recurse | where {-Not $_.PSIsContainer}

    Получаем общий размер файлов в папке в мегабайтах

    $totalsize = "{0:N0}" -f ($folderSize.sum / 1MB)

    $totalsize = "{0:N0}" -f ($folderSize.sum / 1MB)

    $totalsize = $totalsize.Replace('.','')

    Получим свободный обьем диска в дисководе (это гдето 4400 мб). Это будет наибольшее значение.

    $DVD = "{0:N0}" -f ((gwmi Win32_LogicalDisk | Where {$_.DriveType -Eq "5"}).FreeSpace/1MB)
    $DVDmax = $dvd.Replace('.','')

    Вазьмем какоето наименьшее значение для общего обьема (4000 мб)

    $DVDmin = $DVDmax - 400

    Проверим подходит ли общий размер файлов в папке под наш запрос

    if (($totalsize -ge $DVDmax)-and($totalsize -le $DVDmin)){"подходит для DVD"}else{"Не подходит для DVD! Тогда чтото тут придумать как перечислять файлы по пока общий размер определенного колва файлов не будет подходить по размеру"}

    ...все дальше я завис...((( как перечислить сложение обьема файлов по очереди не понимаю.

    Сейчас пробую через foreach перебрать все файлы на подходящий обьем....

    foreach($odin in $alle.fullname){
    $odinsum = Get-ChildItem $odin | Measure-Object -property length -sum
    Write-Host "$odin - " -ForegroundColor Cyan -NoNewline;"{0:N0}" -f ($odinsum.sum / 1MB)
    $odinn = "{0:N0}" -f ($odinsum.sum / 1MB)
    if(($odinn -ge $DVDmax)-and($odinn -le $DVDmin)){"подходит для DVD"}
    }


    • Изменено cht3 17 июня 2019 г. 22:02
    17 июня 2019 г. 19:15
  • проблема не в цикле (do или foreach), а в отсутвии (или непонимании) логики процесса. Автоматизации хорошо поддаются задачи которые вы можете выполнить руками, или любой студент-гуманитарий по вашей  инструкции может сделать необходимое в любой ситуации правильно. Я вам привел вопросы и без ответов на них мы можем создать десятки нерабочих решений с использованием разных циклов или и вовсе без них, но цель как правило иная.

    The opinion expressed by me is not an official position of Microsoft

    17 июня 2019 г. 21:27
    Модератор
  • Я правильно понимаю, вы хотите знать как происходит это в обычном режиме!? Создаются бэкапы в определенные папки. Я отбираю подходящие по размеру, группирую если надо, для записи на диски на 4гб, 8гб, 25 и 50. Ну собственно и записываю. После удаляю! Вот собственно и все. Просто их очень много и занимает время. А если автоматизировать я буду только менять диски в приводе и все! Как то так.
    18 июня 2019 г. 8:43
  • Ваши мечты понятны. Но! Деятельность, которая способна удовлетворить ваши мечты называется программирование: чтобы автоматизировать вашу задачу нужно написать программу (не важно, что она называется "скрипт" и будет написана на Powershell: он - тоже язык программирования) . И этадеятельность - она более сложная, чем системное администрирование (и в наше время лучше оплачивается ;-) ).

    Если вы после этого вступления всё ещё чувствуете себя в силах попробовать автоматизировать вашу задачу, то и делать это надо так, как это принято в программировании:

    1. Составить алгоритм, по которому должна работать программа
    2. Записать этот алгоритм на выбранном вами языке программирования (Powershell)
    3. Протестировать и отладить программу: убедиться, что она работает, и устранить нйденные ошибки (в более-менее сложных программах они есть всегда).

    Вы же пытаетесь проскочить первый пункт - а данном случае это делать нельзя: алгоритм решения вашей задачи - он, как вы уже убедились, нетривиальный. Поэтому начните с алгоритма: напишите подробную пошаговую инструкцию, что надо делать.

    Например:

    1. получить список всех файлов для бэкапа
    2. для каждого файла из списка файлов, который ещё не занесен в какой-то список бэкапа (ваш текстовый файл) выполнить шаги:
    3.   ...
    4. если в списке файлов остались файлы, не занесенные ни в один список бэкапа
    5.   создать новый список бэкапа (для другого диска)
    6.   перейти к шагу 2
    7. ...
    8. Профит!

    После этого каждый шаг алгоритма записывается на Powershell и вы получаете тот скрипт, который может решить вашу задачу. Далее нужно проверить - действительно ли он решает, и если нет - исправить скрипт (или даже алгоритм, если ошибка - в нем).

    Как-то так.

     

    Слава России!

    18 июня 2019 г. 10:04
  • Тут я с вами не соглашусь)) Алгоритм я уже раз 5перерисовывал и в принципе он был описан уже тут, хотя может и не совсем точно но примерно. Я никогда не проскакиваю алгоритм действий)) без него сложно, поэтому рисую его как раньше с школах рисовали оч удобно)) Вы в правильном направлении алгоритма) Проблема заключаеца в его реализации...у меня недостаточно знаний!. Изза недостатка знаний пазл не складывается!
    19 июня 2019 г. 15:53
  • в том что вы описали не рассматриваются (или не упоминаются) методики формирования списков, например что должно быть с файлами больше 4гб должно ли получиться минимальное количество болванок путем различных комбинаций файлов или можно этот момент игнорировать, как отличать обработанные файлы от не обработанных учитывая что вы формируете только списки но общий казан не трогаете и пр.

    если нет задачи сделать оптимально можете свободно делать так как уже выше описали

    с чем конкретно у вас возникает затык? 

    если интересное мое мнение, то я бы делал и запись и удаление скриптом без формирования промежуточных списков (разве что для нужд учета)

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

    из практических рекоммендаций к вашему коду, формировать строки из чисел а потом их сравнивать плохая практика которая может работать не стабильно и местами не очивидно, поэтому если вы на экран не выводите сообщение с числом мб/гб то оставляйте значение в оригинальном виде


    The opinion expressed by me is not an official position of Microsoft

    19 июня 2019 г. 16:05
    Модератор
  • Примерный алгоритм 1. Пересчет файлов в папке или получить список файлов. 2. (Как вариант) распределить файлы по категориям записав их в разные ТхТ. К примеру: до 4.4гб, от 4,5 до 8.4гб, от 8.5 до 24гб, от 25 до 50гб. 3. Либо сразу Сгруппировать файлы для записи, сформировавТХТ файлы под отдельный диск. Можно в отдельных папках также 4,8,25,50 и там файлы 1,2,3... под отдельный диск. 4. Если есть файлы не подходящие не под одну категорию тогда записать их в отдельный файл. 5. Как только все архивы распределены по файлам, PS будет запускать прогу через которую будет записывать на диск по записям из файлов. 6. После того как диск записан, удалять ТХТ и сами архивы. 7. Если ТхТ файлы закончились, начинать с первого пункта!

    21 июня 2019 г. 12:45
  • Вы, конечно, имеете полное право на меня обидеться за то, что я напишу ниже, однако "Платон мне друг, но истина - дороже".

    То, что вы написали выше - это "не совсем" алгоритм, точно так же, как известное письмо в компьютерную игровую компанию, кончавшееся словами "Я джва года хочу такую игру" (если кто не видел этот текст, над которым лет 15 назад угорало пол-Рунета - гуглите, этот текст однозначно скрасит вам пятницу) - "не совсем" дизайн-документ: форма текста не соответствует намерению писавшего.

    Алгоритм решения задачи, по своей форме - это набор точно определенных шагов, который, будучи выполнен, решает задачу. Шаги должны быть именно точно определенные - безо всяких "можно", "как вариант", "либо" - чего у вас в тексте выше встречается в изобилии. Все эти слова - они относятся к выбору алгоритма, но не к описанию уже выбранного.

    Алгоритм - набор шагов может быть либо:

    • последовательностью шагов
    • условным: "если условие выполнено - выполнять <один набор шагов>, в противном случае - выполнять <другой набор шагов>"
    • циклической конструкцией: "для каждого элемента списка выполнить <набор шагов>" или "пока верно условие выполнять <набор шагов>" (есть и другие варианты, я их тут для простоты не упоминаю)
    • переходом к определенному ранее или позднее шагу (не рекомендуется, но возможно)

    Шаг - это действие, которое может быть как простым (очевидным образом отображаемым на один или несколько операторов языка программирования), так и сложным (т.е. - тоже алгоритмом, тоже набором шагов, но который будет расписан позднее).

    И вот только после того, как вы таким образом опишете алгоритм решения задачи,  можно будет написать программу, которая её решает. Описывать можно и в уме, но если не получается - придётся текстом на своем родном языке, на бумаге или в файле (кстати, при этом текст в файле потом, по мере написания программы превращается в отличные комментарии к ней).

    Поэтому выбирайте алгоритм, описывайте его и пишите на его основе программу - скрипт на Powershell. Если реализация какого-то конкретного шага алгоритма встретит затруднение в переводе его на Powershell - обращайтесь, с этим здесь помогут. А вот с выбором самого алгоритма  - вряд ли.


    Слава России!

    21 июня 2019 г. 14:00
  • Сайт совершенно бесполезный. Все что я получил так это непонятные умнические замашки про алгоритны, шаги и прочую извините чушь! Это мое мнение! Как Вы пишите "Вы, конечно, имеете полное право на меня обидеться за то, что я пишу"!!!

    Я попросил совет-подсказку как мне группировать файлы, а вы оба мне лечите про алгоритмы и прочую ненужную мне чушь. Спасибо и на этом. Складвается ощущение что вы тут только психологией занимаетесь и теорией.

    Я не просил ни выбор алгоритма и ничего подобного, я сформулировал задачу и попросил помочь. Если нет желающих так нефига писать всякое! Перечитайте свои сообщения и подумайте нафига вы на этом сайте! Может вы не программисты вовсе!!!

    Буду искать помощи на других сайтах а у мелкософта одни теоретики! Бесполезный сайт!

    Спасибо за потерю времени!!!

    Вы в одном из своих же ответов практически написали готовое решение согласно своего же тз (не до конца сформулированного но все же). Для того что бы вам помочь быстро я от вас ждал конкретный вопрос, но так и не дождался.

    Вы уже все сами написали осталось причесать и довести до рабочего состояния

    С моей стороны или с любой другой стороны без конкретного вопроса, вам возможно помочь только готовым решением что занимает много времени, а его к сожалению всегда крайне мало.

    Коллега вам написал правильный тезис что при наличии правильного алгоритма его без проблем можно заскриптовать, так как все блоки и переходы гуглятся, но именно из-за того что алгоритм не четкий у вас возникает затык.

    Уважайте пожалуйста окружающих вас людей и их время. У меня сейчас глубокая ночь и я сижу над вашим вопросом последний час (подготовка среды, файлов для отладки, кода и пр.), но после вашего последнего поста у меня возникает резонный вопрос "а стоит ли продолжать, или забить на все и крутитесь сами..."


    The opinion expressed by me is not an official position of Microsoft

    23 июня 2019 г. 22:16
    Модератор
  • Сайт совершенно бесполезный. Все что я получил так это непонятные умнические замашки про алгоритны, шаги и прочую извините чушь! Это мое мнение! Как Вы пишите "Вы, конечно, имеете полное право на меня обидеться за то, что я пишу"!!!

    Я попросил совет-подсказку как мне группировать файлы, а вы оба мне лечите про алгоритмы и прочую ненужную мне чушь. Спасибо и на этом. Складвается ощущение что вы тут только психологией занимаетесь и теорией.

    Я не просил ни выбор алгоритма и ничего подобного, я сформулировал задачу и попросил помочь. Если нет желающих так нефига писать всякое! Перечитайте свои сообщения и подумайте нафига вы на этом сайте! Может вы не программисты вовсе!!!

    Буду искать помощи на других сайтах а у мелкософта одни теоретики! Бесполезный сайт!

    Спасибо за потерю времени!!!

    Приветствую.

    Если вас не устраивает тот или иной ответ, задайте свой вопрос на сторонних форумах, коих в просторах интернета предостаточно либо используйте поиск.
    На данном форуме отвечают обычные пользователи не имеющие никакого отношения к MSFT, оказывающие помощь на безвозмездной основе.
    Предупреждение:  на форумах не допустим Флуд \ Не цензурная лексика. Проявите уважение к людям.

    Надеюсь на понимание, тема закрыта


    Я не волшебник, я только учусь. MCTS, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Отметить как ответ" или проголосовать за "полезное сообщение". Disclaimer: Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть, без каких-либо на то гарантий. Блог IT Инженера, Яндекс Дзен, YouTube, GitHub.

    23 июня 2019 г. 22:21
    Модератор
  • Сайт совершенно бесполезный. Все что я получил так это непонятные умнические замашки про алгоритны, шаги и прочую извините чушь! Это мое мнение! Как Вы пишите "Вы, конечно, имеете полное право на меня обидеться за то, что я пишу"!!!

    Я попросил совет-подсказку как мне группировать файлы, а вы оба мне лечите про алгоритмы и прочую ненужную мне чушь. Спасибо и на этом. Складвается ощущение что вы тут только психологией занимаетесь и теорией.

    Я не просил ни выбор алгоритма и ничего подобного, я сформулировал задачу и попросил помочь. Если нет желающих так нефига писать всякое! Перечитайте свои сообщения и подумайте нафига вы на этом сайте! Может вы не программисты вовсе!!!

    Буду искать помощи на других сайтах а у мелкософта одни теоретики! Бесполезный сайт!

    Спасибо за потерю времени!!!

    Пример плохого алгоритма

    Следующей командой создаем тестовые файлы:

    foreach ($i in 1..60){fsutil file createnew "c:\tmp\test\test$i.txt" $($i*1MB)}

    На выходе получим 60 файлов размером от 1 до 60 МБ

    Следующим скриптом перемещаем файлы согласно вашему алгоритму:

    $SrcPath = 'C:\TMP\test\'
    $DstPath = 'C:\TMP\DST'
    
    function Move-ImageToDir {
        param(
            [string]$SrcPath,
            [string]$DstPath,
            $SizeLimit,
            [switch]$EnableLogging
        )
    
        # If destination path does not exist - create it
        if (!(Test-Path $DstPath)){
            New-Item -ItemType Directory -Path $DstPath
        }
        # Get foldername with max number
        $DstCandidate = Get-ChildItem $DstPath -Directory | where {$_.name -match '^\d+$'} | Select FullName,@{n='IntName';e={[int]($_.name)}} | sort IntName | Select -Last 1
        
        if ([string]::IsNullOrEmpty($DstCandidate)){
            # In case if forder with number as a name was not found create first one
            $DstCandidate = "$DstPath\1\"
        } ElseIf ((Test-Path $DstCandidate.fullname) -and (((gci $DstCandidate.fullname -Recurse | Measure-Object -property length -sum).Sum + (Get-Item $SrcPath).Length) -gt $SizeLimit)) {
            # In case if previous used folder have not enough space - use next one
            $DstCandidate = "$DstPath\$($DstCandidate.IntName+1)"
        } Else {
            $DstCandidate = $DstCandidate.Fullname
            Write-Host "Folder exist '$DstCandidate', have enough free space, and will be used as dst dir" -ForegroundColor Green
        }
    
        # If DST folder does not exist - create it 
        If ((! [string]::IsNullOrEmpty($DstCandidate)) -and (! (Test-Path $DstCandidate))){
            New-Item -ItemType Directory -Path $DstCandidate
        } else {
            # Something bad could be here
        }
    
        Write-Host "Moving '$SrcPath' to '$DstCandidate'"
        if ($EnableLogging){
            Write-Host "$SrcPath | Out-File -FilePath ""$DstCandidate\log.txt"" -Append" -ForegroundColor Yellow
            $SrcPath | Out-File -FilePath "$DstCandidate\log.txt" -Append
        }
        Copy-Item -Path $SrcPath -Destination $DstCandidate
        Remove-Item $SrcPath -ErrorAction SilentlyContinue
    }
    
    
    Get-ChildItem $SrcPath -File | sort length | foreach {
        $parameters = @{
            'SrcPath' = $_.FullName;
        }
        switch ($_.Length){
            {$_ -le 4.4MB}{
                $parameters.Add('DstPath', "$DstPath\Images4.4\")
                $parameters.Add('SizeLimit', 4.4MB)
            }
            {($_ -gt 4.4MB) -and ($_ -le 8.4MB)}{
                $parameters.Add('DstPath', "$DstPath\Images8.4\")
                $parameters.Add('SizeLimit', 8.4MB)
            }
            {($_ -gt 8.4MB) -and ($_ -le 24MB)}{
                $parameters.Add('DstPath', "$DstPath\Images24\")
                $parameters.Add('SizeLimit', 24MB)
            }
            {($_ -gt 24MB) -and ($_ -le 50MB)}{
                $parameters.Add('DstPath', "$DstPath\Images50\")
                $parameters.Add('SizeLimit', 50MB)
            }
            {$_ -gt 50MB}{
                $parameters.Add('DstPath', "$DstPath\OtherImages\")
                $parameters.Add('SizeLimit', 1TB)
            }
        }
        Move-ImageToDir -EnableLogging @parameters 
    }
    *Если вам подойдет, то MB на GB можете поменять без проблем

    Результаты заполненности дисков будут в данном тесте порядка 60 - 90%, где 60% будет значить что диск заполнен чуть больше чем на половину.

    Если файлов тысячи или сотни тысяч, алгоритм подобный вашему приведет к тому что ваша компания будет тратить на 30% больше денег чем могла бы.

    В лююлм случае пример я привел, дальше делайте что хотите.


    The opinion expressed by me is not an official position of Microsoft

    23 июня 2019 г. 23:40
    Модератор
  • Вы меня извините, но когда пытаешься сформулировать конкретикуи не совсем сам понимаешь как правильно и удобнее это должно работать, я прошу помощи да и не жду что ктото ответит, но когда отвечают не один раз одно и тоже про то что алгоритм нарисовать и прочее, немного напрягает....как в школу вернулся. Я не хотел никого обидеть, просто читаю читаю и ничего того что могло навести меня на идею, мысль в ваших текстах не помогло. Нужна такая же идея только доработанная, совет как правильно организовать. Мои хотелки это одно но одна голова хорошо а несколько лучше. Может я както неправильно организовать это хочу. Еслиб вы совет или идею даже подкинули, может я както замудренно пытаюсь это сделать. Но все же спасибо за ваше время. Я погоречился!
    24 июня 2019 г. 6:50
  • Спасибо 🙏 за ваше терпение и время. Буду тестировать. О результате отпишусь!
    24 июня 2019 г. 6:53
  • Вы меня извините, но когда пытаешься сформулировать конкретикуи не совсем сам понимаешь как правильно и удобнее это должно работать, я прошу помощи да и не жду что ктото ответит, но когда отвечают не один раз одно и тоже про то что алгоритм нарисовать и прочее, немного напрягает....как в школу вернулся. Я не хотел никого обидеть, просто читаю читаю и ничего того что могло навести меня на идею, мысль в ваших текстах не помогло. Нужна такая же идея только доработанная, совет как правильно организовать. Мои хотелки это одно но одна голова хорошо а несколько лучше. Может я както неправильно организовать это хочу. Еслиб вы совет или идею даже подкинули, может я както замудренно пытаюсь это сделать. Но все же спасибо за ваше время. Я погоречился!

    Мое мнение, вам стоит формировать диск файлами максимально приближенными к размерам дисков после чего в созданные каталоги допихивать мелкие файлы. Так можно добиьбся заполненности в 80-90% при тех же условиях, но если все архивы одинаковы (например 6 ГБ), то лучше использовать еще нечто иное. Архивы по 6ГБ будут занимать 72% места на 8.4 болванках, но если влезут, 24ГБ болванку то заполненность будет близка к 100%.

    Короче говоря задача не такая ростая как может показаться на первый взгляд.


    The opinion expressed by me is not an official position of Microsoft

    24 июня 2019 г. 7:35
    Модератор
  • Знаю что это условиями задачи не рассматривалось, но вы не думали про более эфективный и надежный метод хранения бекапов в виде облака или ленточной библиотеки?

    Диски субстанция не надежная и они часто портятся со временем (влага, солнце, механические повреждения...)

    В случае с лентами, они бывают довольно вместительными + более долговечны чем диски dvd, а облако и вовсе лимитировано только вашими потребностями и возможностями платить.


    The opinion expressed by me is not an official position of Microsoft


    24 июня 2019 г. 9:52
    Модератор
  • Я рассматриваю любые условия задачи, и возможные предложения, но расматривать их одно а подходят ли они это уже вопрос.

    Лента тоже есть, но на нее идут другие архивы. Облако не рассматриваю как раз изза оплаты, архивы оч тяжелые и поэтому это не оправданно дорого.

    Диски скажем так это временное хранилище, тк они пишутся постоянно, то данные быстро перекрываются новыми. Скажем так огни на всякий случай. а пишутся они долго к примеру 25гб не говоря уже по 50гб, и время на их запись тоже уходит. А с автоматизацией я буду просто менять диски в в приводе или в приводах.

    Пока это не самый эффективный но доступный метод.

    24 июня 2019 г. 13:16
  • можно посчитать стоимость диском и стоимость медленных дисков в ажуре гуглоблаке и/или амазоне и может получиться что они будут обходиться дешевле

    The opinion expressed by me is not an official position of Microsoft

    24 июня 2019 г. 13:26
    Модератор
  • скрипт превосходно работает))). Огроменное спасибище!)))

    Решение в принципе оригинальное...я и не подумал сразу файлы сортировать под диски.

    пока отдельно нарисовал запись диска:

    $p = Get-Item "D:\Temp\Images4.4\*" -ErrorAction SilentlyContinue
    cd "C:\Program Files (x86)\CDBurnerXP\"
    $ndrive = .\cdbxpcmd.exe '--list-drives'
    $ndrive = $ndrive.Remove(1)
    $cdbxpcmd = ".\cdbxpcmd.exe"
    $waitdisk = " --wait-for-disc -device:$ndrive "
    $cdw = $cdbxpcmd + $waitdisk
    $date = Get-Date -format ddmmyy_HH:MM
    $cdname = "Dat.$date"

    foreach ($p1 in $p){
     Write-Host "papka $p1 na zapisj" -ForegroundColor Yellow
     cmd /c $cdw
     cmd /c "cdbxpcmd.exe --burn-data -device:$ndrive -folder[\]:$p1 -name:$cdname"
     cmd /c "cdbxpcmd.exe -eject -device:$ndrive"
     Write-Host "disk gotov" -ForegroundColor Green
    }

    #####################

    У меня есть вопрос касательно записи, можно ли записывать диски с помощью самого PS ?

    Для записи я использую CDBurnerXP. Протестил. Запись удачно прошла.

    Есть еще вопрос по группировке файлов. Вы похожий вопрос мне задавали. Как можно группировать файлы по папкам не так как они идут в порядке увеличения или уменьшения размера а к примеру пересчитывать начиная с больших и если место еще есть то добавлять меньший по размеру, как вы писали выше: "Мое мнение, вам стоит формировать диск файлами максимально приближенными к размерам дисков после чего в созданные каталоги допихивать мелкие файлы."

    вот как эти меокие файлы допихивать ))))

    надеюсь понятно описал)) я сам ато прочитал и чтото не совсем понял что написал;)))


    • Изменено cht3 25 июня 2019 г. 7:42
    24 июня 2019 г. 16:40
  • Еще раз приветствую! Могу ли я тут же продолжить беседу по поводу доработки этого скрипта или надо новую тему создать? Спасибо!
    24 июля 2019 г. 14:02
  • Еще раз приветствую! Могу ли я тут же продолжить беседу по поводу доработки этого скрипта или надо новую тему создать? Спасибо!
    если хотите приватности (общения только со мной), то можно продолжать тут. Но больше шансов быстро получить ответ в новых темах.

    The opinion expressed by me is not an official position of Microsoft

    24 июля 2019 г. 14:15
    Модератор