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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    BumerangII



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

    Цитата:
    А не проще ли полностью создать sysprep.ini батником?

    это я так понимаю собрать его через echo ...... >>sysprep.ini
     

    Всего записей: 88 | Зарегистр. 14-12-2005 | Отправлено: 15:37 05-12-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Кстати получается что еще  "(" и ")" надо экранировать при определенных условиях вывода...

    ----------
    sic transit gloria mundi

    Всего записей: 2704 | Зарегистр. 15-12-2003 | Отправлено: 16:00 05-12-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновилась отличная утилита ansicon.exe (ver 1.23), позволяющая управлять консольным хостом с помощью esc-последовательностей (вспомните DOS или Linux). Загрузить последнюю версию можно на: http://ansicon.adoxa.cjb.net/
     
    Для примера реализация прогресс-бара с помощью ansicon:

    Код:
     
    ::
    :: Progress bar example
    ::
     
    @echo off
    setlocal
     
    :: Your Path To ansicon.exe (если оно не в "пути")
    set "path=%path%;C:\users\mdm\bin\ansi"
    ansicon -p
     
    echo.
    echo    [\esc[s                         ]
    for /l %%i in (1,1,25) do call:progress "%%i"
    echo.
    goto:eof
     
    :progress
    sleep -m 400
     
    set /a "per=%~1*100/25"
    set "per=  %per%"  
     
    for %%i in (/ - \ ^|) do sleep -m 25 & echo \esc[u\esc[2G%%i  
    echo \esc[u#\esc[s\esc[32G%per:~-3%%%
     

     
    Кажлый "\esc"==27 символ ACSII (обратная стрелка)
    Кому интересно, тот оценит.
     
    Кроме того можно организовать цветастую cmd :)
     
    ЗЫ. Для задержки (так как пример) использовал sleeep.exe (откуда не помню)
     
    Или еще пример:

    Код:
     
    @echo off
    setlocal
     
    :: это ваши настройки
    set PATH=%~dp0ANSI;%PATH%
     
    echo %cmdcmdline% | findstr "ansicon" 1>nul || ansicon -p
    echo.
    for /l %%i in (0,1,1) do (
        for /l %%j in (30,1,37) do (
            for /l %%k in (40,1,47) do (
                0>nul set /p=\esc[%%i;%%j;%%km TEST \esc[0m
            )
            echo.
        )
        echo.
    )
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:32 05-12-2009 | Исправлено: 01MDM, 17:53 05-12-2009
    mugil_cephalus

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

    Цитата:
    ЗЫ. Для задержки (так как пример) использовал sleeep.exe (откуда не помню)  

    из win server 2003 reskit http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:59 05-12-2009
    NIKZZZZ



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

    Цитата:
    это я так понимаю собрать его через echo

    Берешь любой нормальный текстовой редактор, поддерживающий RegExp, и перед каждой строкой вставляешь

    Код:
    >>"d:\...\sysprep.ini" Echo  

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

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 18:13 05-12-2009 | Исправлено: NIKZZZZ, 18:14 05-12-2009
    yurkesha



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

    Цитата:
    Ограничения - спец. символы

    Ну во-первый спец символы можно экранировать при выводе:
    Код:
    ECHO ^& ^| ^< ^>
    а во-вторых можно почитать мое последенее сообщение на предыдущей странице

    ----------
    sic transit gloria mundi

    Всего записей: 2704 | Зарегистр. 15-12-2003 | Отправлено: 18:26 05-12-2009 | Исправлено: yurkesha, 18:28 05-12-2009
    NIKZZZZ



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

    Цитата:
    Ну во-первый спец символы можно экранировать при выводе

    Так я это и мел ввиду, просто при простой замене можно на этом споткнуться.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:11 05-12-2009
    egor23



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как получить \ обработать произольное значение в переменной (могут быть всякие спец.символы)?
     

    Цитата:
    CMDOW @ /HID  
    @ - текущее окно  
    как CMDOW определяет текущее окно?

    перефразирую
    как работает параметр @ ?

    Всего записей: 3831 | Зарегистр. 03-11-2003 | Отправлено: 19:40 05-12-2009 | Исправлено: egor23, 19:44 05-12-2009
    01MDM



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

    Цитата:
    Как получить \ обработать произольное значение в переменной (могут быть всякие спец.символы)?  

    Вопрос некорректен. Что, откуда и куда?
     

    Цитата:
    как работает команда @ ?

    Определяет по заголовку. Наверное.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:56 05-12-2009
    egor23



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

    Цитата:
    Вопрос некорректен. Что, откуда и куда?

    изначальная задача:
    1. получаем значение переменной %NUMBER_OF_PROCESSORS%
    2. проверяем, что там цифра, а не "мусор" (на всякий случай)
    вот с мусором и загвоздка со спец. символами :;"^%'' и т.п.

    Всего записей: 3831 | Зарегистр. 03-11-2003 | Отправлено: 20:02 05-12-2009
    mugil_cephalus

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

    Цитата:
    перефразирую  
    как работает параметр @ ?

     
    CMDOW [window | /T] [/B] [/F] [/P]
     
     
    window Window to list. If not specified all windows are listed. Specify a window by its unique handle in hexadecimal format (0x1A0142) or its caption (case insensitive). Windows without captions may be specified by their ClassName. The At symbol '@', may be used to refer to this window ie 'CMDOW @'. Use double quotes for captions containing whitespace or control characters.  
     
    http://www.commandline.co.uk/cmdow/index.html
     
    http://www.computerra.ru/gid/rtfm/system/272855/
     
    p.s.
    хотя мне казалось, что определяется через окно в фокусе - winAPI32 active_window  
    ( http://firststeps.ru/mfc/winapi/win/r.php?29 )
     
    Добавлено:
    01MDM

    Цитата:
    Для примера реализация прогресс-бара с помощью ansicon:

     

    Цитата:
    Кому интересно, тот оценит.  
     
    Кроме того можно организовать цветастую cmd  

     
    интересно посмотреть - когда будет время (скачаю ansicon.exe  и sleep) обязательно посмотрю скрипт
     

     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 20:22 05-12-2009 | Исправлено: mugil_cephalus, 20:34 05-12-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    egor23
    Поскольку легче всего проверить через findstr, то этим методом и будем пользоваться. Но. Здесь есть одна "засада". Если перенаправлять значение на вход findstr посреством `echo', то есть большая вероятность ошибки. Например:

    Код:
     
    set "_N=^4"
    echo %_N% | findstr "<условие>"
     

    Мы скорее всего получим ненужный результат, так как echo "съест" символ "^". Поэтому лучше выводить на проверку через `set':

    Код:
     
    set "_N=4^"
    echo with echo:
    echo %_N% | findstr "[0-9]"
    echo.
    echo with set:
    set _N | findstr ".*=[0-9]$"
     

     
    Соответственно по результатам выполнения можно выполнять дальнейшие условия:

    Код:
     
    set "_N=4^"
    set _N | 1>nul findstr ".*=[0-9]$" && echo true  || echo invalid  
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:52 05-12-2009
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM

    Цитата:
    Поэтому лучше выводить на проверку через `set':  

    На самом деле команда set _N выведет не значение переменной _N, а значения всех переменных, начинающихся на _N. Т.о., результат может оказаться некоректным.

    ----------
    Разум когда-нибудь победит

    Всего записей: 2387 | Зарегистр. 09-02-2003 | Отправлено: 23:59 05-12-2009
    DEN1165



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

    Подскажите как правильно использовать /exclude
    а то вот так что-то не получается
     

    Код:
     
    xcopy "%fromDir%" "%toDir%" /f /d /i /s /e /k /r /h /y /exclude ".exe"
     


    Всего записей: 25 | Зарегистр. 05-01-2007 | Отправлено: 12:29 06-12-2009 | Исправлено: DEN1165, 12:32 06-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DEN1165
    Синтаксис
    xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x]
     [/exclude:файл1[+[файл2]][+[файл3]] [{/y|/-y}] [/z]
     
    Указывает список файлов, содержащих строки. Каждая строка
    должна находиться в отдельной линии в файлах.  Если одна из
    строк совпадает с любой частью абсолютного пути копируемого
    файла, то такой файл копироваться не будет.  Например,
    указывание таких строк, как \\obj\\ или .obj, исключает
    из копирования все файлы в папке obj и, соответственно, все
    файлы с расширением .obj.
     
     
    попробуй - /exclude:.exe

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:35 06-12-2009 | Исправлено: mugil_cephalus, 13:40 06-12-2009
    Demon L



    Lite FSB
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста....
    Как решить такую задачу:
    есть папка "IN" в ней папки вида "01 Январь" "02 Февраль" итд. В папку "IN" постоянно падают файлики *.msg. Нужно раскладывать файлики по дате создания... но так чтоб не учитывать год (для того чтоб получилось универсально)  
    То есть нужно чтоб файлы которые появились, скажем в январе, оказались в папке "01 Январь" и при этом имя папки куда должен в итоге попасть файл должно определятся только по первым двум цифрам в данном случае "01" и не обращать внимания на остальное название папки (потому как вместо "Январь" там может быть все чт угодно)...

    Всего записей: 372 | Зарегистр. 24-07-2003 | Отправлено: 15:05 06-12-2009 | Исправлено: Demon L, 15:16 06-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    ты тут n страниц назад спрашивал что-то (не помню) про localtime, я сейчас читал/копался в help, наткнулся - м.б. тебе подойдет (не знаю) - вот такое:
    F:\Documents and Settings\admin>w32tm /tz
    Часовой пояс: Текущий:TIME_ZONE_ID_STANDARD Сдвиг: -180мин (UTC=LocalTime+Bias)
      [Зимнее время:"Московское время (зима)" Сдвиг:0мин ДатаM:10 D:5 DoW:0)]
      [Летнее время:"Московское время (лето)" Сдвиг:-60мин ДатаM:3 D:5 DoW:0)]

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 15:10 06-12-2009
    01MDM



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

    Цитата:
     
    set _N выведет не значение переменной _N, а значения всех переменных, начинающихся на _N.
     

    Переменная уникальна, в системе созвучной нет. К тому же это просто пример.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:30 06-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а если я из папки sys32 удалю в GUI systeminfo.exe, а потом в CLI выполню sfc (с синтаксисом, думаю, разберусь сам) - то в папке снова появится полноценный systeminfo.exe - я правильно понимаю?

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 16:38 06-12-2009
    Craager



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Разве никто до сих пор не придумал способ удаления всего содержимого папки (файлы, подкаталоги чтобы удалялись все), чтобы она полностью пустая стала?

    Всего записей: 373 | Зарегистр. 08-06-2006 | Отправлено: 19:34 06-12-2009
       

    Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru