Скопируйте файлы в командной строке Windows с помощью Progress

Мне нужно копировать файлы с помощью командной строки Windows (по умолчанию доступно в XP Pro или более поздних версиях) и отображать ход выполнения процесса.

Индикатор прогресса может быть в терминале или в окне графического интерфейса. Он предназначен для использования во время сценариев пакетного файла.


person Community    schedule 12.09.2008    source источник
comment
Robocopy — ваш друг.   -  person Harry Johnston    schedule 31.07.2012
comment
За исключением того, что Robocopy на самом деле копирует папки, а не файлы.   -  person Alan B    schedule 15.12.2015


Ответы (8)


Я использовал команду копирования с параметром /z для копирования через сетевые диски. Также работает для копирования между локальными дисками. Проверено на версии XP Home.

person adrian    schedule 12.02.2011
comment
Идеальный ответ. Это работает очень хорошо, а также позволяет перезапустить, если соединение прервано. Удивлен, что раньше не замечал эту функцию, спасибо. - person Justin; 28.02.2013
comment
xp любая и win7 любая. - person barlop; 21.07.2014
comment
+1 Спасибо @adrian, все сработало отлично. Как это хорошо для копирования через сетевые диски? Я считаю, что Robocopy лучше подходит для этих целей? - person Anurag; 02.09.2015
comment
Это просто сработало для Windows 10 с USB-диском восстановления. Спасибо!!! - person Tarik; 09.10.2018

robocopy:

Robocopy, или "Надежное копирование файлов", представляет собой командную строку. команда репликации каталога и/или файла. Robocopy функционально заменяет Xcopy с дополнительными возможностями. Он был доступен как часть Windows Resource Kit, начиная с Windows NT 4.0, и впервые был представлен в качестве стандартной функции в Windows Vista и Windows Server 2008. Команда robocopy...

person Kent Boogaart    schedule 12.09.2008
comment
Близко, но недоступно на XP и по умолчанию. Хотя я это учту. - person ; 12.09.2008
comment
Это с набором инструментов Windows 2003 Server Resource Toolkit. - person Paul Knopf; 31.03.2015

Параметр Esentutl /y позволяет копировать (отдельные) файловые файлы с индикатором выполнения. как это :

введите здесь описание изображения

команда должна выглядеть так:

esentutl /y "FILE.EXT" /d "DEST.EXT" /o

Команда доступна на каждом компьютере с Windows, но опция y представлена ​​в Windows Vista. Так как это работает только с одиночными файлами, это не очень полезно для маленьких. Другое ограничение заключается в том, что команда не может перезаписывать файлы. Вот скрипт-оболочка, который проверяет место назначения и при необходимости может удалить его (справку можно увидеть, передав /h).

person npocmaka    schedule 08.09.2014
comment
Как перезаписать существующие файлы в месте назначения? Я должен удалить его вручную? Я не могу найти переключатель /o на Win7. - person PeterCo; 27.07.2016
comment
@PeterCo да, переключатель /o доступен в Win7. Esentutl не может перезаписывать файлы, поэтому вам придется добавить строку if exist destination ... - person npocmaka; 27.07.2016

Некоторые интересные тайминги относительно всех этих методов. Если у вас есть гигабитные соединения, вы не должны использовать флаг /z, иначе это снизит скорость вашего соединения. Robocopy или dism — единственные инструменты, которые работают на полной скорости и показывают индикатор выполнения. wdscase предназначен для многоадресной рассылки с сервера WDS и может быть быстрее, если вы создаете образ более 5 компьютеров. Чтобы получить время 1:17, я максимизировал гигабитное соединение со скоростью 920 Мбит / с, поэтому вы не получите этого на двух соединениях одновременно. Также обратите внимание, что экспорт небольшого wim-индекса из более крупного wim-файла занимает больше времени, чем просто копирование всего этого.

Model  Exe       OS       switches     index    size    time   link speed 
8760w  dism      Win8     /export-wim  index 1  6.27GB  2:21   link 1Gbps
8760w  dism      Win8     /export-wim  index 2  7.92GB  1:29   link 1Gbps
6305   wdsmcast  winpe32  /trans-file  res.RWM  7.92GB  6:54   link 1Gbps
6305   dism      Winpe32  /export-wim  index 1  6.27GB  2:20   link 1Gbps
6305   dism      Winpe32  /export-wim  index 2  7.92GB  1:34   link 1Gbps
6305   copy      Winpe32  /z           Whole    7.92GB  25:48  link 1Gbps
6305   copy      Winpe32  none         Wim      7.92GB  1:17   link 1Gbps
6305   xcopy     Winpe32  /z /j        Wim      7.92GB  23:54  link 1Gbps
6305   xcopy     Winpe32  /j           Wim      7.92GB  1:38   link 1Gbps
6305   VBS.copy  Winpe32               Wim      7.92    1:21   link 1Gbps
6305   robocopy  Winpe32               Wim      7.92    1:17   link 1Gbps

Если у вас нет robocopy.exe, почему бы не запустить его из общего сетевого ресурса, из которого вы копируете файлы? В моем случае я предпочитаю делать это, чтобы мне не приходилось пересобирать файл boot.wim WinPE каждый раз, когда я хочу внести изменения, а затем обновить десятки флэш-накопителей.

person Iconiu    schedule 12.08.2013

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

В другом сценарии я использовал robocopy. Графический интерфейс Robocopy упрощает настройку параметров командной строки.

person Gulzar Nazim    schedule 12.09.2008

Вот скрипт, который я использую:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
mode con:cols=210 lines=50
ECHO Starting 1-way backup of MEDIA(M:) to BACKUP(G:)...
robocopy.exe M:\ G:\ *.* /E /PURGE /SEC /NP /NJH /NJS /XD "$RECYCLE.BIN" "System Volume Information" /TEE /R:5 /COPYALL /LOG:from_M_to_G.log
ECHO Finished with backup.
pause
person djangofan    schedule 04.12.2012

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

Я использовал полосу прогресса и проценты, пока скрипт копирует файлы игры. Ядерный трон:

@echo off
title NTU Installer
setlocal EnableDelayedExpansion

@echo Iniciando instalacao...
if not exist "C:\NTU" (
    md "C:\NTU
)
if not exist "C:\NTU\Profile" (
    md "C:\NTU\Profile"
)
ping -n 5 localhost >nul

for %%f in (*.*) do set/a vb+=1
set "barra="
::loop da barra
for /l %%i in (1,1,70) do set "barra=!barra!Û"
rem barra vaiza para ser preenchida
set "resto="
rem loop da barra vazia
for /l %%i in (1,1,110) do set "resto=!resto!"
set i=0
rem carregameno de arquivos
for %%f in (*.*) do (
    >>"log_ntu.css" (
        copy "%%f" "C:\NTU">nul
        echo Copiado:%%f
    )
    cls
    set /a i+=1,percent=i*100/vb,barlen=70*percent/100
    for %%a in (!barlen!) do echo  !percent!%% /                         
    [!barra:~0,%%a!%resto%]
    echo Instalado:[%%f] / Complete:[!percent!%%/100%]
    ping localhost -n 1.9  >nul
)
xcopy /e "Profile" "C:\NTU\Profile">"log_profile.css"              

@echo Criando atalho na area de trabalho...
copy "NTU.lnk" "C:\Users\%username%\Desktop">nul
ping localhost -n 4  >nul

@echo Arquivos instalados!
pause
person CommanderBoss Ge    schedule 29.01.2021
comment
pt-BR: Espero ter ajudado XD. en-US: Надеюсь, я помог XD. - person CommanderBoss Ge; 29.01.2021

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

person Josef    schedule 12.09.2008
comment
Да, я знаю, что могу написать такое. Идея состоит в том, чтобы повторно использовать любые доступные ресурсы и упростить совместное использование сценария. - person ; 12.09.2008
comment
Чтобы быть справедливым, Гульзар, Йозеф предлагал отправить вам один и отправить вам свой доступный ресурс для повторного использования. Я подозреваю, что вы перестали читать после 9 слов. - person harriyott; 12.09.2008
comment
Любой Йозеф, вы можете поделиться им с остальной частью сообщества :) - person Fernando Barrocal; 12.09.2008
comment
Приеду домой, откопаю и скину сюда ссылку. - person Josef; 12.09.2008
comment
ПРОТИВ - вы до сих пор не разместили ссылку - person barlop; 19.07.2016