|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Совмещение прогресс бара и комманды xcopy |
|
|
CMD/BAT - Совмещение прогресс бара и комманды xcopy
|
Новый участник Сообщения: 8 |
Добрый день, как совместить прогресс бар с коммандой Xcopy.
Мне необходимо что бы после запуска бат файла с коммандой xcopy, показывалась не только фраза: "скопировано *** файлов", а во время копирования шёл этот бар, возможно ли написать такое? Вот сам прогресс бар: @Echo Off Setlocal EnableDelayedExpansion rem Число символов в прогрессбаре Set N_Col=79 rem Число иттераций (файлов в моем случае) на 100% Set cntA=100 rem ----------------------------- Set cnt=0 Echo Обработка запущена :loop Call :Work Call :Bar Обработано If Not %cnt%==%cntA% GoTo :loop rem ----------------------------- Echo. Echo Обработка завершена Pause>nul Exit :Bar If %cnt%==0 ( For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!░ For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0! <Nul Set /p X=!Line0! ) Set /a Inc=((%cnt%+1)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA% If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X=█ Set /a cnt+=1 Set /a prsnt=cnt*100/cntA Title %1 %prsnt%%% файлов: %cnt% из %cntA% GoTo :EOF :Work rem Здесь собственно рабочая процедура GoTo :EOF |
|
Отправлено: 09:22, 01-09-2010 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать - обход файлов придется делать дважды: сначала для подсчета, потом для обработки;
- копировать файлы придется по одному (обновлять бар между копированием файлов) - конкретная реализация зависит от условий копирования, пример (без процедуры :BAR): @Echo Off Setlocal EnableDelayedExpansion rem Каталог откуда копируем файлы Set FROM=C:\_\_ rem Маска копируемых файлов Set MASK=*.* rem Каталог куда копируем файлы Set DEST=C:\~\_ rem Число символов в прогрессбаре Set N_Col=79 rem Число иттераций (файлов в моем случае) на 100% For /F "Delims=" %%i In ('DIR /B/S/A-D "%FROM%\%MASK%"^|Find /V /C ""') Do Set cntA=%%i rem ----------------------------- Set cnt=0 Echo Обработка запущена For /F "Delims=" %%i In ('DIR /B/S/A-D "%FROM%" 2^>Nul') Do ( Call :Work "%%i" Call :Bar Обработано ) rem ----------------------------- Echo. Echo Обработка завершена Pause>nul Exit :Work Set "TO=%~1" Call Set "TO=%%TO:%FROM%=%DEST%%%" Echo F|XCopy /Q/Y "%~1" "%TO%" >Nul 2>>"%~dpn0.err" GoTo :EOF |
Отправлено: 10:15, 01-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать а возможно сделать прогресс при копировании одного файла?
|
Отправлено: 10:44, 01-09-2010 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата romrip:
- вариант на VBS: Function FileCopy(strFileFrom, strDirTo) Dim objShell, objFolder Set objShell = CreateObject("shell.Application") Set objFolder = objShell.NameSpace(strDirTo) If Not objFolder Is Nothing Then objFolder.CopyHere strFileFrom, 16 End If End Function |
|
Отправлено: 12:02, 01-09-2010 | #4 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата amel27:
просто закрывается окно, если вставить паузу перед @exit /b то (1, 11) Ошибка компиляции Microsoft JScript: Предполагается наличие ';' далее сразу закрывается |
||
Последний раз редактировалось romrip, 01-09-2010 в 16:57. Отправлено: 15:40, 01-09-2010 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата romrip:
наткнулся на одну замечательную утилитку - порт никсовой DD, которая может копировать файлы по частям, с её помощью можно организовать прогресс-бар для больших файлов: @Echo Off SetLocal EnableDelayedExpansion Set $f=c:\DIR1\file1.iso Set $d=d:\DIR2\file2.iso If Exist "%$d%" DEL "%$d%" For %%i In ("%$f%") Do Set $z=%%~zi Set /A $z=$z/99 Set N_Col=79 Set cntA=100 Set cnt=0 rem ----------------------------- Echo Обработка запущена for /l %%i in (0,1,99) do ( dd bs=%$z%c count=1 if="%$f%" of="%$d%" skip=%%i seek=%%i >nul 2>&1 Call :Bar ) rem ----------------------------- Echo. Echo Обработка завершена Pause>nul Exit |
|
Отправлено: 16:06, 01-09-2010 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать @Echo Off SetLocal EnableDelayedExpansion Set $f=C:\1\2003.GDB Set $d=C:\2\2003.GDB If Exist "%$d%" DEL "%$d%" For %%i In ("%$f%") Do Set $z=%%~zi Set /A $z=$z/99 Set N_Col=79 Set cntA=100 Set cnt=0 rem ----------------------------- Echo Обработка запущена for /l %%i in (0,1,99) do ( dd bs=%$z%c count=1 if="%$f%" of="%$d%" skip=%%i seek=%%i >nul 2>&1 Call :Bar ) rem ----------------------------- Echo. Echo Обработка завершена Pause>nul Exit :Bar If %cnt%==0 ( For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0!░ For /L %%a In (1,1,%N_Col%) Do Set Line0=!Line0! <Nul Set /p X=!Line0! ) Set /a Inc=((%cnt%+1)*%N_Col%)/%cntA%-(%cnt%*%N_Col%)/%cntA% If %Inc% GTR 0 For /L %%a In (1,1,%Inc%) Do <Nul Set /p X=█ Set /a cnt+=1 Set /a prsnt=cnt*100/cntA Title %1 %prsnt%%% файлов: %cnt% из %cntA% GoTo :EOF |
Отправлено: 17:19, 01-09-2010 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать romrip, тогда для начала разобраться с копированием:
- закомментировать строку "Call :Bar" - в строке DD отключить подавление вывода, убрать в конце " >nul 2>&1" - добавить вывод командной строки: @Echo Off SetLocal EnableDelayedExpansion Set $f=C:\1\2003.GDB Set $d=C:\2\2003.GDB If Exist "%$d%" DEL "%$d%" For %%i In ("%$f%") Do Set $z=%%~zi Set /A $z=$z/99 Set N_Col=79 Set cntA=100 Set cnt=0 rem ----------------------------- Echo Обработка запущена for /l %%i in (0,1,99) do ( echo dd bs=%$z%c count=1 if="%$f%" of="%$d%" skip=%%i seek=%%i dd bs=%$z%c count=1 if="%$f%" of="%$d%" skip=%%i seek=%%i rem Call :Bar ) rem ----------------------------- Echo. Echo Обработка завершена Pause>nul Exit - смотреть лог "test.log" P.S. постить процедуру BAR без толку - спецсимволы теряются |
Отправлено: 17:35, 01-09-2010 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать кажеться разобрался, нехотел понимать русские буквы в заголовке,
теперь лучше, а можно вывести прогресс в выполняемом окне в виде растущей полоски ? и как спрятать выполение dd ? проценты в заголовке хорошо, но вот все окно забиваться работай dd - это не очень. @set @x=0 /*; @set $f=C:\1\2003.GDB; @set $d=C:\2\2003.GDB; @cscript //nologo /e:jscript "%0" "%$f%" "%$d%"; @exit /b */new ActiveXObject("shell.Application").NameSpace(WScript.Arguments(1)).CopyHere(WScript.Arguments(0),16); // новая ошибка: test1.cmd(8, 3) Ошибка выполнения Microsoft JScript: 'new ActiveXObject(...) .NameSpace(...)' - есть null или не является объектом. так, а как прикрбтить вот такой :BAR :BAR Setlocal EnableDelayedExpansion Rem Длина строки Set len=45 Rem Строка Set string="IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" For /L %%a In (1,1,%len%) Do ( For %%I In (^| / - \) Do ( Set /p X=%%I<Nul Call :Wait ) Set /p X=!string:~%%a,1!<Nul ) Echo. Echo Копирование завершено Pause>nul Exit неплохо еслиб бар выглядел так как в приклепленном батнике в архиве: |
Последний раз редактировалось romrip, 02-09-2010 в 00:23. Отправлено: 18:08, 01-09-2010 | #9 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата romrip:
|
|
Отправлено: 19:26, 01-09-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Вставка прогресс бара в функцию | Medic84 | AutoIt | 52 | 07-04-2014 00:19 | |
Графика - [addon] z-Runss - модификация прогресс-бара установки | sLiDeR-X | Наборы обновлений для Windows XP/2003/Windows 7 | 152 | 18-11-2011 11:34 | |
[решено] Вписывание прогресс-бара в гуи-форму | saavaage | AutoIt | 9 | 09-08-2010 22:16 | |
CMD/BAT - [решено] нельзя назвать батник делающий xcopy, xcopy.bat почему ? | foxbat | Скриптовые языки администрирования Windows | 3 | 17-09-2009 05:33 | |
Комманды из bat | fedww | Программное обеспечение Windows | 0 | 25-06-2007 13:44 |
|