Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния)

Ответить
Настройки темы
CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния)

Пользователь


Сообщения: 55
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:52, 14-07-2009

 

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Меня удивила именно сама форма записи, выглядит как перенаправление потока от комманды к команде, но не содержит обязательного разделителя "|".
Вобщем увидел такое впервые. С остальным все понятно и так (/? пользоваться умеем)

Отправлено: 19:26, 16-07-2009 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата semiono:
а уменя всегда была мечта, хотяб как игрушку крутящийся курсор зделать, нельзя ли?
хотя я не знаю даже, ну хотяб sleep и потом выход? или может чтё полезное придумать?
# idebug \|/-\|/-..... »
...пользуясь нарисованным выше...
...пришлось повозиться со спецсимволами - в предпоследней строке значок [^] очень нужен!!!
и еще, символов "забой" в StatusText должно быть не меньше чем симвлов самого текста, так что можно заготовить 79-символьную строку из символов #8 и тогда StatusText можно менять динамически, незабывая выравнивать ее пробелами на 79-символьную границу... а вообще эти приколы не позволяют параллельно осуществлять полноценный вывод инфы на экран (его конечно можно эмулировать через буфер и команду CLS, но сие есть "извращения"), а вот игра с названием окна - вещь сильная!

Заодно вопрос - есть встроенные средства получать управление не вводом целой строки (как set /P) а по одному символу?

Код: Выделить весь код
@Echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set StagePos=1
set StageLen=4
set CurStages="-\|/"
set StatusText=QWERTYUIOPing...

:loop
call :CurRotate
rem do Something useful...

Goto loop
Exit

:CurRotate
set Cur=!CurStages:~%StagePos%,1!
if %StagePos%==%StageLen% (set StagePos=1) else (set /a StagePos+=1)
set /p None=%StatusText%^%Cur%<nul
Exit /b

Отправлено: 20:17, 16-07-2009 | #22


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата semiono:
хотяб как игрушку крутящийся курсор зделать, нельзя ли? »
Так пойдет?
Код: Выделить весь код
@Echo Off
Echo Курсор врашается
For /L %%a In (1,1,10) Do (
	For %%I In (^| / - \) Do (
		Set /p X=%%I<Nul
		Call :Wait
	)
)
Echo.
Echo Курсор остановлен
Pause>nul
Exit

:Wait
rem Здесь варианты задержки для изменения скорости вращения
For /L %%a In (1,1,10000) Do Set a=1
rem nircmdc wait 100
rem Ping -n 1 localhost>Nul
GoTo :EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:25, 16-07-2009 | #23


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Цитата gora:
:Wait rem Здесь варианты задержки для изменения скорости вращения »
можно вызывать типовую процедуру таймера (В начало пакетного файла ОБЯЗАТЕЛЬНО включить код SetLocal EnableExtensions):

Код: Выделить весь код
:Timer
set ExitCode=0
set CTime=%Time:,=%
set CTime=%CTime::=%
if "%Timer%"=="" set /A Timer=%CTime%+%1
if /I %Timer% GEQ 24000000 set /a %CTime%+=24000000
if /I %Timer% LEQ %CTime% (
set ExitCode=1
set /a Timer+=%1
if /I %Timer% GEQ 24000000 set /a %Timer%-=24000000
)
exit /b %ExitCode%
Вызывать так call :Timer XX, где XX - задержка в сотых долях секунды,
а проверять, прошло ли нужное время, через переменную %ErrorLevel% - ноль означает, что время еще не наступило и можно пока еще что-нить сделать полезное.
т.е. этот таймер без ожидания!
... что-то наколбасил тут, вобщем перед использованием смотрим пример: На экран будет выводится следующее пороговое значение таймера ТОЛЬКО когда таймер срабатывает!

Пример использования:
Код: Выделить весь код
@Echo off
SetLocal EnableExtensions

:loop
call :Timer 20
if ErrorLevel 1 Echo %Timer%
Goto loop

:Timer
set ExitCode=0
set CTime=%Time:,=%
set CTime=%CTime::=%
if "%Timer%"=="" set /A Timer=%CTime%+%1
if /I %Timer% GEQ 24000000 set /a %CTime%+=24000000
if /I %Timer% LEQ %CTime% (
set ExitCode=1
set /a Timer+=%1
if /I %Timer% GEQ 24000000 set /a %Timer%-=24000000
)
exit /b %ExitCode%

Отправлено: 21:54, 16-07-2009 | #24


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата NiOl:
… и можно пока еще что-нить сделать полезное.
Вот с этим-то как раз и проблема. Я около полугода назад, наткнувшись на пост коллеги amel27, возрадовался, пошёл от него танцевать («крутилки», наподобие выложенной выше, простые проценты, учёт ширины консоли и т.п.)… Всё было замечательно. Работало изумительно. До тех пор, пока, перед выкладыванием, не понадобилось снабдить код реальным примером, где сия функциональность будет не просто сбоку припёка, а, вот так, что называется, — до зарезу. И я ничего подходящего так и не смог найти. Ибо команды, утилиты и пакетные файлы практически не реализуют частичную функциональность, подобно языкам высокого уровня (если её не вводить искусственно; скажем, копируя не одной командой «copy a:\*.txt b:\*.*», а перебирая ручками в «for …»), наподобие VBScript'ового «For Each objFile In objFSO.GetFolder(…).Files». То есть, для визуального отображения куда как более потребна простая «крутилка» или не вычисленный, а простой «безлимитный» индикатор прогресса (т.е. просто отображающего, что процесс идёт) посредством той же вышеозвученной команды «<NUL SET /P strTemp=.».

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

Отправлено: 23:23, 16-07-2009 | #25


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Iska:
нарисовать индикатор прогресса проще, нежели найти, где он действительно нужен в пакетных файлах »
не с той стороны подходите - не задачи надо под фичи искать, а наоборот...
кста, был еще пример применения: http://forum.oszone.net/thread-137412.html
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:41, 17-07-2009 | #26


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать


Я в восторге! Невероятно!
Одно замечание или пожелание, хочеться чтобы не просто крутился а двигался по строке >...../
Но тут всякие фантазии могут быть и вариации. Я бы представил это как хм... постепенное заполнение
строки текстом и в конце строки всегда крутящийся курсор!
Признаюсь, я видел это в Gentoo загрузочном диске, и это было очень красиво, так меня и не оставило желание, такое повторить но не под башем.
Там как это обычно бывает выводились команды загрузки всяких устройств плавным разворачиванием строк,
закрывающихся крутилкой, как бы она рисует эти строки.
Если не влом подумайте ещё, хоть и безделица но блин таг приятно! Причём это ещё раз доказывает,
что CMD не уступает скриптам под баш.

Ещё офтоп, подскажите, можно ли буффер обмена использовать в коммандах типа @echo или > и >>
Я имею ввиду, то что в виндоус в GUI делаем когда Select All / Copy и потом это вставить через "%1" какнибудь? Или может как-то иначе?

-------
Полезное сообщение


Отправлено: 19:21, 17-07-2009 | #27


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z cursor_s_090717_20-08.7z
(530 байт, 79 просмотров)

semiono, так пойдет?
Код: Выделить весь код
@Echo Off
Setlocal EnableDelayedExpansion
Rem Длина строки
Set len=45
Rem Строка
Set string="Демонстрация ползущего и вращающегося курсора"

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

:Wait
rem Здесь варианты задержки для изменения скорости вращения
For /L %%a In (1,1,3000) Do Set a=1
rem nircmdc wait 100
rem Ping -n 1 localhost>Nul
GoTo :EOF

Последний раз редактировалось gora, 17-07-2009 в 20:10. Причина: добавил вложение

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:43, 17-07-2009 | #28


Аватара для semiono

Ветеран


Сообщения: 830
Благодарности: 33

Профиль | Отправить PM | Цитировать



нецензурщина

Кстати, вопрос, а что делать когда квадраты из форума копируешь? Адекватно ли это вставиться в блокнот? И почему у меня интересно кодировка гонит,
я вообще думал у моей виндоус (WinXP SP2 Eng) проблем нету?
1251 =c_1251.nls 1252 =c_1251.nls - тут ли это?

-------
Полезное сообщение


Отправлено: 19:56, 17-07-2009 | #29


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата semiono:
Адекватно ли это вставиться в блокнот? »
Нет. Блокнот не поддерживает DOS кодировку. Уже писал про это, прочтите предыдущую страницу.

Отправлено: 20:00, 17-07-2009 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Графическая оболочка для CMD (индикатор состояния)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
FreeBSD - Графическая оболочка на FreeBSD clin Общий по FreeBSD 17 26-08-2014 10:15
[решено] При запуске винды пропадает графическая оболочка виндовз QUMATOZ Лечение систем от вредоносных программ 23 07-10-2008 14:06
Debian/Ubuntu - графическая оболочка для убунту Sirko9 Общий по Linux 3 27-03-2008 14:28
Графическая оболочка Windows XP Guest Хочу все знать 6 16-07-2003 22:15
Графическая оболочка для MPlayer Romul8 Программное обеспечение Linux и FreeBSD 18 27-12-2002 20:11




 
Переход