none
Копирование файла + GUI RRS feed

  • Вопрос

  • Добрый день.
    про то как копировать файлы с удаленного пк на диск многое уже написано: copy, xcopy, robocopy
    но вот вопрос, каким образом скопировать файл, что бы в процессе копирования, появилось окно прогресса выполнения (что появляется когда мы копируем в проводнике или когда копируются какие то файлы при установке чего либо)
    т.е задача что бы юзер видел скока процентов уже завершено и сколько времени осталось ждать.
    идеальным вариантом был бы просто batник.

Ответы

  • Вот, кстати, готовый командлет по копированию файлов со статусбаром:

    http://poshcode.org/991

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    • Помечено в качестве ответа VM2 24 мая 2009 г. 3:54
  • http://zorion.wordpress.com/2009/05/13/copy-data/

    function copy-data {
        param($source, $dest)
        $counter = 0
        $files = Get-ChildItem $source -Force -Recurse
        foreach($file in $files)
            {
            $status = "Copying file {0} of {1}: {2}" -f $counter, $files.count, $file.name
            Write-Progress -Activity "Copyng Files" -Status $status -PercentComplete ($counter/$files.count * 100)
            Copy-Item $file.pspath $dest -Force
            $counter++
            }
    }
    • Предложено в качестве ответа zorion 12 мая 2009 г. 23:31
    • Помечено в качестве ответа VM2 24 мая 2009 г. 3:54

Все ответы

  • Добрый день.
    про то как копировать файлы с удаленного пк на диск многое уже написано: copy, xcopy, robocopy
    но вот вопрос, каким образом скопировать файл, что бы в процессе копирования, появилось окно прогресса выполнения (что появляется когда мы копируем в проводнике или когда копируются какие то файлы при установке чего либо)
    т.е задача что бы юзер видел скока процентов уже завершено и сколько времени осталось ждать.
    идеальным вариантом был бы просто batник.

    Батником реализовать прогрессбар конечно вряд-ли можно. А вот на PoSh или VBS вполне реально

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • В PoSh есть командлет "Write-Progress":

    ИМЯ
        Write-Progress

    ОПИСАНИЕ
        Отображает индикатор выполнения в командном окне Windows PowerShell.


    СИНТАКСИС
        Write-Progress [-activity] <string> [-status] <string> [[-id] <int>] [-percentComplete <int>] [-secondsRemaining <i
        nt>] [-currentOperation <string>] [-parentId <int>] [-completed] [-sourceId <int>] [<CommonParameters>]


    ПОДРОБНОЕ ОПИСАНИЕ
        Отображает индикатор выполнения в командном окне Windows PowerShell. Будет ли отображаться индикатор выполнения опе
        рации, зависит от значения переменной $ProgressPreference. Чтобы узнать значение этой переменной, введите $Progress
        Preference. Допустимые значения переменной: SilentlyContinue, Continue, Stop и Inquire. Если она имеет значение Sil
        entlyContinue, сведения о ходе выполнения операции на консоль не выводятся. Чтобы задать значение этой переменной д
        ля сеанса, введите $ProgressPreference = "<значение>". Командлет Write-Progress использует данные о состоянии выпол
        няющейся команды или сценария, чтобы визуально отобразить ход выполнения.

    Вот простой пример как реализовать прогрессбар на Posh:

    for ($i = 1; $i -le 10; $i++)
    {
    write-progress -id 1 -activity "Прогресс выполнения" -status "Статус:" -percentComplete ($i*10);
    sleep 1;
    for ($j = 1; $j -le 10; $j++)
    {
    write-progress -id 2 -parentId 1 -activity "Копирование файлов" -status "Имя копируемого файла" -percentComplete
    ($j*10)
    sleep 0.5
    }
    }

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
  • Вот, кстати, готовый командлет по копированию файлов со статусбаром:

    http://poshcode.org/991

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    • Помечено в качестве ответа VM2 24 мая 2009 г. 3:54
  • http://zorion.wordpress.com/2009/05/13/copy-data/

    function copy-data {
        param($source, $dest)
        $counter = 0
        $files = Get-ChildItem $source -Force -Recurse
        foreach($file in $files)
            {
            $status = "Copying file {0} of {1}: {2}" -f $counter, $files.count, $file.name
            Write-Progress -Activity "Copyng Files" -Status $status -PercentComplete ($counter/$files.count * 100)
            Copy-Item $file.pspath $dest -Force
            $counter++
            }
    }
    • Предложено в качестве ответа zorion 12 мая 2009 г. 23:31
    • Помечено в качестве ответа VM2 24 мая 2009 г. 3:54