Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4

Модерирует : KLASS, IFkO

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах
(часть 1, часть 2, часть 3)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR
.
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подправил прогресс бар, а мелькание попробуй спросить у корифеев: элроира, капралбелла, маза фака.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 04:11 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
    Туперь прогресс-бар вообще не двигается

    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 09:20 15-10-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    moonkir
    Отправь свой файл по мылу nmusic3@ya.ru

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 09:41 15-10-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
    Tipulatoid
    Можно проще:

    Код:
     
    @ECHO OFF
    FOR /f "tokens=*" %%a in ('fsutil fsinfo drives ^| FIND  /v ""') do CALL :_comp "%%a"
    ECHO %drives%
    GOTO :EOF
     
    :_comp
    SET drives=%drives%%~1
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:20 15-10-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Снова вместо vsego я вставил vsego1 ! Исправлено. А на мелькание оказывают влияние строчки
    echo.
    Убрал их, гораздо меньше стало.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:27 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
    Уф, пришел на работу, работает уже, нужно было пробелы поубирать, на работе процессор слабый - медленно расспаковывает и поэтому не мерцает...

    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 10:27 15-10-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    moonkir
    На счет мигания могу предложить вот такую идею, как пример:

    Код:
     
    @echo off
    for /l %%i in (0,1,100) do (
        rem Выполняюся условия, для рассчета прогресс-бара и т.д
            title %%i
        set /p="#"<nul
        sleep 1
        )  
     

     
    for /l  использовал для наглядности

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:29 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
     
       
     
    Добавлено:
    01MDM
    подскажите как примень к скрипту:

    Код:
     @ECHO OFF  
    setlocal enabledelayedexpansion  
    :Extract  
    for /f %%a in ('dir msu /b') do set /a kolvo+=1  
    set file=1  
    set "bar=--------------------------------------------------------------------------"
    echo.  
    cd msu  
    For %%F In ("*.msu") Do Call :Ext %%F  
    goto Exit  
    :Ext  
    Set /a N+=1  
    set "vsego=!N!"  
    set /a vsego*=75  
    set /a vsego/=%kolvo%  
    call :tyu  
    cls  
    echo                        -=Распаковка обновлений=-  
    echo.
    echo Распаковывается !N! из %kolvo% обновлений  
    echo %1 ...
    echo.  
    echo [!bar!]  
    if defined updall goto continue  
    if exist  "..\Cab\%~n1.cab" (  
    echo.  
    echo Обновление с таким именем уже существует  
    :Choice  
    echo.  
    set /p choice=Заменить^(o^),Пропустить^(s^),Заменить Все^(a^)?  
    echo.  
    if "!choice:~0,1!"=="o" goto continue  
    if "!choice:~0,1!"=="a" (set "updall=true" & goto continue)  
    if "!choice:~0,1!"=="s" goto :EOF  
    goto :Choice  
    )  
    :continue  
    call ..\tools\servicing\expand -F:* "%1" "..\Cab" > nul  
    ::Удаление лишних файлов  
    del /f /q "..\Cab\*.xml" > nul  
    del /f /q "..\Cab\*.txt" > nul  
    del /f /q "..\Cab\WSUSSCAN.cab" > nul  
    GoTo :EOF  
    :Exit  
    pause
    exit  
    GoTo :EOF  
    :tyu  
    :ert  
    if !vsego! GTR !file! (
        set "bar=#!bar!"
        set /a file+=1
        set "bar=!bar:~0,-1!"
        goto :ert
    )


    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 10:50 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Я вот думаю может как то можно изменять информацию на экране без CLS

    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 13:43 15-10-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    moonkir

    Цитата:
    Я вот думаю может как то можно изменять информацию на экране без CLS

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

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:35 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    а чем это нам поможет ?

    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 15:23 15-10-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    moonkir
    Вот на примере dir /b, можешь переделать под свои нужды, особо не проверял

    Код:
     
    @ECHO OFF
    cls
    echo.
    echo Start
    echo.
    setlocal enabledelayedexpansion
    set filecount=0
    for /f "delims=" %%i in ('dir /b %systemroot%\system32') do (set /a filecount+=1)
    set /a percent=filecount/100
    set count=0
    set curpercent=0
    set step=%percent%
    for /f "delims=" %%i in ('dir /b %systemroot%\system32') do (
        set "file=%%i"
        set /a count+=1
        if !count! geq !percent! (
            set /a curpercent+=1
            set /a percent+=step
            for /f %%i in ('echo !curpercent:~-1! ^| findstr "0 2 4 6 8"') do (set /p="#"<nul)
        )
        title  Extracting !curpercent!%% : !file!
        ping -n 1 localhost >nul
    )
    echo.
    echo.
    echo Finish
    echo.
    title  DONE!
     

     
    Конечно не так красиво, но не мигает. Вот если бы был забой..

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:23 15-10-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    moonkir
    Есть такой вариант, прогресс-бар нафик, а проценты писать в заголовке окна бат файла.
    Вместо C:\WINDOWS\system32\cmd.exe будет:
     
    1 процентов обновления выполнено
    2 процентов обновления выполнено  
      ...
    100 процентов обновления выполнено
     
    При этом окно не мигает.
     
    Добавлено:
    или даже так:
    1% [#----------------------------------------------]
    2% [##---------------------------------------------]
       ...
    100% [################################]

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:51 15-10-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    moonkir

    Цитата:
    а чем это нам поможет ?

    Не нужно использовать Cls, полоса прогресса будет просто перерисовываться.
    Можно так-же этими же утилитами выводить ее без перевода строки (LF), в этом случае она так же  будет перерисовываться.  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:24 15-10-2007
    AndryG

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть утилитка compname - возвращает имя компьютера.
    В батнике пишу:
     echo 123 compname 456
    получаю "123 compname 456"
    А хочу "123 S46 456"  (s46 -> имя компа )
    Я так понял мне нужно использовать "|" ... врожде как каналами это дело называют ... но ничего путнего не получилось.  
    Подскажите, пжлст ... уж очень не хочется через доп. переменную делать.

    Всего записей: 26 | Зарегистр. 07-09-2007 | Отправлено: 16:37 15-10-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndryG не заморачивайся утилитками, в win2000+ есть встроенная переменная computername, соответственно  
    echo 123 %computername% 456 напечатает что ты хотел.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:42 15-10-2007
    AndryG

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. %computername% можно переопределеить
    2. Я хочу разобраться с этим делом.

    Всего записей: 26 | Зарегистр. 07-09-2007 | Отправлено: 16:46 15-10-2007
    moonkir

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven
    Попробовал только что, симпотно получилось если TITLE [!bar!]
    Только нада делать вместо ----------------
    равно ============
    А то в заголовке шрифт другой и не очень получается.

    Всего записей: 287 | Зарегистр. 04-11-2006 | Отправлено: 16:52 15-10-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndryG
    echo 123 %computername% 456

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:54 15-10-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndryG 1. а оно кому-то надо? комп тоже можно переименовать.
    2. for /f "delims=" %%a in ('hostname') do  echo 123 %%a 456  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:59 15-10-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru