alex_diablo
Постоянный участник
- Сообщения
- 144
- Реакции
- 9
@echo off
:begin
cls
set "per= ^[^----------^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^>---------^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^-^>--------^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^--^>-------^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^---^>------^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^----^>-----^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^-----^>----^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^------^>---^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^-------^>--^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^--------^>-^] "
echo %per%
timeout /t 2 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
cls
set "per= ^[^---------^>^] "
echo %per%
timeout /t 2 /nobreak >nul
goto begin
:exit
exit /b
echo.
echo Unity installer:
echo ================
echo.
echo.
echo Installation of Unity version %vers% has been started
echo.
echo.
echo. Please do not close the application before the end of the installation
echo.
echo.
echo.
echo.
:: вот куда-нибудь в это место хотелось бы поместить прогресс-бар..
echo.
Ну вызовите его через call?
@ECHO OFF
SetLocal EnableExtensions
set num=1
:begin
call :progressbar %num%
cls
echo.
echo Unity installer:
echo ================
echo.
echo.
echo Installation of Unity version %vers% has been started
echo.
echo.
echo. Please do not close the application before the end of the installation
echo.
echo.
echo.
echo. %progressbar%
timeout /t 1 /nobreak >nul
if exist c:\temp\unity_log.txt goto exit
set /a num=%num%+1
if %num% == 50 set num=1
goto begin
:progressbar
goto progress%1
:progress1
set "progressbar= ^[ ---------------------------------------- ^] "
exit /b
:progress2
set "progressbar= ^[ ^>--------------------------------------- ^] "
exit /b
:progress3
set "progressbar= ^[ -^>-------------------------------------- ^] "
exit /b
:progress4
set "progressbar= ^[ --^>------------------------------------- ^] "
exit /b
:progress5
set "progressbar= ^[ ---^>------------------------------------ ^] "
exit /b
:progress6
set "progressbar= ^[ ---^>------------------------------------ ^] "
exit /b
Так вы параллельно запускайте
@echo off
SetLocal EnableExtensions
if "%~1"=="ProgressBar" (call :ProgressBarEx& exit)
echo.
echo.
echo.
echo My Program
echo.
echo Begin LONG LONG operation
call :ProgressBar Start
ping 127.1 -n 10
call :ProgressBar Stop
echo.
echo Finished.
pause>NUL
goto :eof
:ProgressBar [Start/Stop]
if /i "%~1"=="Stop" (del "RegBack.reg"& exit /B)
>nul reg export "HKCU\Console" RegBack.reg /y
>nul reg add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "ScreenBufferSize" /t REG_DWORD /d 0x1001e /f
>nul reg add "HKCU\Console\%%SystemRoot%%_system32_cmd.exe" /v "WindowSize" /t REG_DWORD /d 0x1001e /f
start cmd /k "%~f0" ProgressBar
Exit /B
:ProgressBarEx
>nul 2>&1 reg import "RegBack.reg"
title Ожидайте ...
For /L %%C in (1,1,2147483647) do (
ping 127.1 -n 1 >nul
ping 127.1 -n 1 >nul
if not exist "RegBack.reg" exit
set /p="|"<NUL
)
exit /B
Пример:
Так вы параллельно запускайте
Не получится. На основании чего Вы будете следить за завершением процесса инсталляции?здорово! но хотелось бы обойтись одним окошком...
Dragokas вам показал,я про то же говорил.так как запустить параллельно?
Я думаю, что вы не совсем правильно меня поняли.
log.txt (или какой-то другой файл) должен создать не ваш скрипт, а установщик*, чтобы служить опознавательным моментом времени того, что он завершил свою работу и можно прекращать крутить по кругу прогрессбар и начать заниматься другими делами.
* под установщиком подразумевается отдельный процесс, а не какой-нибудь call внутри батника.
Или как вариант, проверять наличие процесса, но это сожрёт процессорное время.
В cmd по errorlevel можно только, если синхронно, только для консольных процессов и только если это предусмотрено разработчиком программы.
В Вашем случае ничего ничего из этого не будет соблюдено.
А вообще, да. В WinApi так и делают - смотрят код возврата, имея на руках ProcessID запущенного процесса. Если он = STILL_ALIVE, то процесс ещё жив.
\\server\Soft\Developers_Tools\Unity\4_5_1\f3\UnitySetup-4.5.1.exe /S /D=C:\Program Files (x86)\Unity_4.5.1
if %ERRORLEVEL%==1 (echo installation error >c:\temp\unity_error_log.txt) else echo installation finished >c:\temp\unity_log.txt
То, что он не соответствует Вашему требованию, чтобы было не больше 1 окна. Если первое будет ждать завершения процесса, как выполнить код прогрессбара, не имея второго окна (процесса)?что плохого в данной реализации?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?