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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
     
    запускаешь батник из консоли , а не мышью ( чтоб он не пропал ) ;
    Код:
    rem @echo off

    вот пример ( проверка визуализирована в верхнем регистре ) :

    Код:
    cd\
    setlocal enabledelayedexpansion
    chcp 1251>nul
    CHCP
    set "cnt=1"
    for /f "tokens=1-2* delims= " %%a in ('netsh interface ip show address ^|find /i "настройка"') do (
    ECHO._%%~a_%%~b_%%~c_
    set "vartmp=%%~c"
    set "var!cnt!=!vartmp:"=!"
    SET
    set /a cnt=!cnt!+1
    ECHO._!CNT!_
    )
    SET VAR

     
    в смысле, где cmd.exe эхом не отображает результат интерпретации - вставляешь разные команды-проверки ( echo , set и т.д. ) правильно ли отработала консоль, не дожидаясь конца скрипта...

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:43 28-06-2010 | Исправлено: mugil_cephalus, 15:03 28-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    boy999
    ну если сам процесс себя отображаемым делает, то извне ты вряд ли что-то сможешь предпринять. К тому же батниками.
    Тут либо хакнуть программулину, чтоб она себя не отображала, либо перехватчик API делать. Оба варианта не из этой ветки.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:56 28-06-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    boy999
    скачай http://www.ntwind.com/software/utilities/hstart.html
    hstart.exe положи в корень и вот код батника autorun.inf , в котором пропиши запуск батника vbs.bat , который запустит твой vbscript
    [autorun]
    open=hstart /NOCONSOLE \vbs.bat
     
    vbs.bat ( положи тоже в корень )

    Код:
    cscript //nologo \1.vbs

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 15:05 28-06-2010 | Исправлено: mugil_cephalus, 15:28 28-06-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jek1976
    Ну замонтировать сетевые диски и с них копировать профили- тоже можно...
    Потом размонтировал и фсё- никто ничего не видит)))
    Интересует?

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 16:56 28-06-2010
    gredmy

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня всем!  
    Может тут помогут! Интересует батник для переключения профилей электропитания, туда и обратно, стоб повесить на кнопку. Один раз нажал-Сбалансированый или Высокая производительность, второй раз- Экономия энергии. Заранее спасибо

    Всего записей: 65 | Зарегистр. 11-12-2005 | Отправлено: 17:46 28-06-2010
    bugsbot



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос более простой. Как в батнике перед тем как разархивировать архив проверять его на битость. То есть если битый ничего не делать (ну или писать в лог что битый), если целый то выполнять. Архивы могут быть или zip или rar. Заранее спасибо!

    Всего записей: 1 | Зарегистр. 21-03-2007 | Отправлено: 18:17 28-06-2010
    jek1976



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

    Цитата:
    Ну замонтировать сетевые диски и с них копировать профили- тоже можно...  

    Не подходит, т.к. компы и так медленные, а тут еще профили по сетке туда-сюда гонять.
     

    Цитата:
    Интересует?

    Интересует только тот способ, когда скриптом (или батником) при начальной загрузке на локальной машине будут удаляться все те профили, которые уже были синхронизированы. Это наиболее рационально!

    Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 20:03 28-06-2010 | Исправлено: jek1976, 20:04 28-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gredmy
    смотри powercfg /?
     
    Добавлено:
    bugsbot

    Цитата:
    опрос более простой. Как в батнике перед тем как разархивировать архив проверять его на битость. То есть если битый ничего не делать (ну или писать в лог что битый), если целый то выполнять. Архивы могут быть или zip или rar. Заранее спасибо!

    С rar примерно так можно:

    Код:
    1>ok.log 2>err.log rar.exe t file.rar
    for %%f in (err.log) do if %%~zf neq 0 echo Ошибка архива
     

     
    Думаю с zipом можно то же самое замутить.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:49 28-06-2010 | Исправлено: res2001, 12:51 29-06-2010
    Altus

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сам себя цитирую. хосподиисусе

    Цитата:
    Как получить дату-время в заданном формате, НО в 7 досе от 98 венды? В переменную конечно же, и без использования временных файлов.
    В переменной должно оказаться что то вроде: 201006280005
    У меня все идеи кончились.

    Упрощаем задачу, допустим получил я на консоль или в файл "дату_время". Как её направить в переменную? For - там кастрированный.
    Да даже если, всё равно команда set в 7 досе умеет только устанавливать переменную и добавлять к переменной. А нужно заменить и удалить лишнее.
     
    Гугл тыкал, в клаву дул, монитор протирал.

    Всего записей: 327 | Зарегистр. 06-09-2006 | Отправлено: 22:05 28-06-2010
    ur5tdk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, подскажите фрагмент батника, чтобы проверялась системная дата и если нужная дата настала  - выполнялись определенные действия, спасибо!!!

    Всего записей: 6 | Зарегистр. 16-08-2007 | Отправлено: 23:24 28-06-2010
    BVV63



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

    Цитата:
    команда call два раза разъименовывает переменные.

    Всё же так и не понял, как Call использовать для разъименования. Можно пример?
    Попробовал переменную вдвойне разъименовать дважды окружив её знаками восклицания . Увы, безрезультатно...
     
    Добавлено:
    mugil_cephalus
    Занятный батник, но я не понял, какой смысл из него должен извлечь.
     
    Добавлено:
    ur5tdk
    Ну, к примеру, можно использовать системную переменную "Date":
    If %Date% == dd.MM.yy (
        ...
        )
    где dd.MM.yy - нужная дата. Недостаток: зависит от формата "КОРОТКОЙ" даты на компе (вернее, у текущего юзера), где исполняется. Можно усложнить, устранив этот недостаток (не помню, кто у нас на форуме впервые для этого посоветовал использовать WMIC):

    Код:
    For /F "Skip=1 Tokens=* UseBackQ" %%A In (
        `%SystemRoot%\System32\WBEM\WMIC.Exe /Node:LocalHost OS Get LocalDateTime`
        ) Do (
        Set LocalDateTime=%%A
        GoTo :0
        )
    :0
    Set CurrentDate=%LocalDateTime:~2,2%.%LocalDateTime:~4,2%.%LocalDateTime:~6,2%
    If CurrentDate == yy.MM.dd (
        ...
        )

    Обратите внимание, что в последнем случае формат даты "yy.MM.dd". Конечно, при желании можно год-месяц-день переставить местами (а также использовать "длинный" год yyyy). Недостаток: работает начиная с XP (в ней изначально появилась команда WMIC).
     
    Добавлено:
    ur5tdk
    Да, вспомнил, недостаток первого примера можно устранить путём правки реестра. При помощи Reg.Exe сохранить формат короткой даты текущего пользователя в переменной, заменить его фиксированным, произвести необходимые действия, затем формат даты восстановить. Я раньше так и делал, но здесь тоже есть недостаток: не работает (вернее, можно заставить работать, но через задницу) в контексте локальной системы.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 06:25 29-06-2010 | Исправлено: BVV63, 07:54 29-06-2010
    res2001



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

    Цитата:
    Всё же так и не понял, как Call использовать для разъименования. Можно пример?
    Попробовал переменную вдвойне разъименовать дважды окружив её знаками восклицания . Увы, безрезультатно...

    Вот так можешь использовать, через двойное присваивание:

    Код:
    @echo off
    set tt=%%systemroot%%
    echo %tt%
    call set tt1=%tt%
    echo %tt1%
     

     
     
    Добавлено:
    а можно и через одинарное
    call set tt=%%systemroot%%
    Но в этом примере трудно понять, что происходит.
     
    Добавлено:
    Altus

    Цитата:
    сам себя цитирую. хосподиисусе


    По остальным вопросам идей нет, т.к. и винды 98 нет.
    Что ты хочешь дальше с этой датой делать?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:39 29-06-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    У, здорово! Использовал второй способ. Опробовал в своём батнике, с которым боролся, действительно всё заработало.
     
    Добавлено:
    Почему-то в описании команды Call нет "Call Set".

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:03 29-06-2010 | Исправлено: BVV63, 09:04 29-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BVV63
    Нет, но работает.
     
    Добавлено:
    Можно с call использовать большинство внутренних команд. Разве что goto, наверное, нельзя.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:30 29-06-2010
    mugil_cephalus

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

    Цитата:
    С rar примерно так можно:  
     
    Код:1>ok.log 2>err.log rar.exe t file.rar  
    for %%f in (err.log) do if "%%~zf" neq "0" echo Ошибка архива  
     

    http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1940#16
    и след. пост


    хотя нет, ремарка снята,  с neq и такая конструкция пройдет

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:05 29-06-2010 | Исправлено: mugil_cephalus, 12:10 29-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mugil_cephalus
    ты прав, спс., исправляюсь:
     
    bugsbot

    Код:
    1>ok.log 2>err.log rar.exe t file.rar  
    for %%f in (err.log) do if %%~zf neq 0 echo Ошибка архива


    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:18 29-06-2010
    mugil_cephalus

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

    Цитата:
    ты прав, спс., исправляюсь:  

    я думаю прокатит и первый вариант со строковым сравнением, т.к. любой символ "не ноль" дает логическое  true по несхожести строк ( вот если бы вычислялось "больше" , "меньше" , etc  - тогда да.... )
    p.s.
    обжегшись на молоке - на воду дую...

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:33 29-06-2010 | Исправлено: mugil_cephalus, 12:36 29-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mugil_cephalus
    да, в этом примере с "не равно" прокатит и в текстовом виде. Просто я тут челу ссылку дал в параллельном топике на этот пост, а у него как раз надо на "больше" проверять. Потому и поправился.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:50 29-06-2010
    mugil_cephalus

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

    Цитата:
    Опробовал в своём батнике, с которым боролся,

    как дон кихот  

    Цитата:
    Занятный батник, но я не понял, какой смысл из него должен извлечь.  

    смысл в проверочных командах ( написаны в верхнем регистре ) - а то может цикловый итератор подставляет в оператор не ту переменную, которую задумывалось при написаниии скрипта  
    типа

    Код:
    echo.%date%
    rem day cutting
    set "var=%date:~0,3%"
    echo._%var%_
    pause

    ошиблись и выдрали с разделителем


    предположим, что мы в первом батнике забыли сменить codepage ( закоментируй -
    Код:
    rem chcp 1251>nul
    ) и посмотри результат  
    образно говоря, брак в фундаменте и брак на крыше имеют разные последствия ; а так, - идет каскадная/последовательная проверка интерпретации скрипта ( если все ок - удаляем или remarkIt проверочные команды )

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:54 29-06-2010 | Исправлено: mugil_cephalus, 13:13 29-06-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    OK. Приму к сведению. Буду использовать, если возникнут затруднения. Хотя батник-отладчик тоже попробую для себя накатать. Тот ведь тоже сможет после каждой строки выводить текущие значения переменных, ErrorLevel и т. п.
     
    Добавлено:

    Цитата:
    закоментируй и посмотри результат

    А вот это бы никак не сказалось . У меня англоязычная система и в батнике я предварительно слово "настройка" заменил на "Configuration" .

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:06 29-06-2010
       

    Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru