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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    TTTT555

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста по такой проблеме:
     
    Имеется комп с Windows 7. Если запускать батник напрямую с мышки - то всё нормально исполняется.
    А вот если поручить сторонней программе запускать этот батник, то вылетает окошко от службы обнаружения интерактивных приложений -> жмем просмотреть сообщение -> попадаем на пустой голубой экран (как бы в какую-то виртуальную среду) где видим исполняемое окошко от нашего батника, но при этом он не выполняет то чего должен, в частности не получает доступа к сети.

    Всего записей: 23 | Зарегистр. 31-05-2009 | Отправлено: 19:34 31-05-2010
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TTTT555
    Так в чем проблема? Проблема явно не в батнике. Либо вырубай службу, либо дай соответствующие права. Стукни лучше в ветку по семерке.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 19:44 31-05-2010 | Исправлено: Joo1z, 19:45 31-05-2010
    wolf0425



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

    Код:
    как задать автоматический вариант ответа на вопросы bat-ника може подскажет кто ?
     
    в простых случаях  - так: echo y | format a:

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:29 31-05-2010
    stydent62

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как в батнике при запросе команды  на подтверждение команды ответить НЕТ автоматически.
     copy /-y c:\1\doc.exe c:\2\doc.exe  дальше сообщенные о командной строки заменить существующий файл? и нам надо ответить НЕТ.

    Всего записей: 25 | Зарегистр. 02-05-2007 | Отправлено: 21:35 31-05-2010
    Grim_Repo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Нужен батник который:
    1. Спрашивает путь к директории проги.
    2. Если путь не указан: подставляет путь по умолчанию, если указан, то проверяет: существует ли директория, если нет - выводит сообщение и прекращает выполнение.
    3. Добавляет в реестр запись, в которой в нужных местах подставлен путь введенный пользователем + заменяя \ на \\.

    Код:
     
    [HKEY_CLASSES_ROOT\foo1]
    @="Путь_юзера\\bar1"
    [HKEY_CLASSES_ROOT\foo2]
    @="Путь_юзера\\bar2"
    и т.п.
     

    Заранее, благодарю!

    Всего записей: 397 | Зарегистр. 02-05-2006 | Отправлено: 22:21 31-05-2010 | Исправлено: Grim_Repo, 22:22 31-05-2010
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть текстовый файл. Нужно в нем удалить ОПРЕДЕЛЕННУЮ строку. Подскажите как реализовать.

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 22:24 31-05-2010
    Ortios



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

    Цитата:
    как бы в sed  сделать скрипт на удаление группы строк:  
    первая строка группы содержит string1  
    последняя строка группы является ближайшей содержащей string2


    Код:
    sed -e :a -e "s/\n.*string1.*string2.*\n/\n/;N;ba"

    SLIDER999

    Код:
    sed "/string/d"


    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 23:36 31-05-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set "folder=C:\some path\bar2"
    set /p folder="Enter path to bar2: "
    if not exist "%folder%" echo Wrong Path && goto:eof
     
    reg add "hkcr\foo1" /ve /t reg_sz /d "C:\some path\bar1" /f
    reg add "hkcr\foo2" /ve /t reg_sz /d "C:\some path\bar2" /f
     

     
    ЗЫ. в "set /p" работает автодополнение пути (TAB)

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:39 31-05-2010 | Исправлено: 01MDM, 23:42 31-05-2010
    igor_andreev

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

    Код:
     "s/\n.*string1.*string2.*\n/\n/;N;ba"

    Я с похожим регэкспом  пытался применить в s///  
    параметр
     /M(multiline mode, в supersed есть такой) для поис
    ка параграфа, так и не смог заставить работать этот/
    M

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 01:16 01-06-2010 | Исправлено: igor_andreev, 01:22 01-06-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ortios
    Цитата:
    как бы в sed  сделать скрипт на удаление группы строк:  
    первая строка группы содержит string1  
    последняя строка группы является ближайшей содержащей string2  

    Код:
    sed -e :a -e "s/\n.*string1.*string2.*\n/\n/;N;ba"  
    этот код удаляет вовсе не то что я заказывал
     
    вот тест на генерацию/проверку файла для string1=b string2=d

    Код:
    @echo off  
    1>file (for %%a in ( 01c 02d 03a 04b 05c 06d 07d 08a 09b 10b 11c 12d 13a 14b 15c ) do echo %%a)
    type  file | sed -e :a -e "s/\n.*b.*d.*\n/\n/;N;ba"  

    после удаления двух блоков строк от b по d должно  
    остаться 8 строк: 01a 02d 03a 07d 08a 13e 14b 15a
    печатает же 01a 13e 14b 15a , и ещё бы я понимал почему...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:50 01-06-2010 | Исправлено: wolf0425, 15:20 01-06-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    stydent62
    echo n | xcopy /-y c:\1\doc.exe c:\2\doc.exe
    (Проверено на XCOPY + WinXP SP3)
     
    Добавлено:
    SLIDER999
    Ну если только одну и одноразово- то как- то так можно:

    Код:
    @echo off
    cls
    setlocal
    REM Предопределяем переменные
    set trgtfile=путь к файлу
    set str=искомая строка
    REM Ниже возможность ввести альтернативный путь к файлу и искомую строку
    set /p trgtfile="Path to file: "
    set /p str="String to find: "
    find /V %str% %trgtfile% >> %trgtfile%.fin
    del /q %trgtfile% || ren %trgtfile%.fin %trgtfile%
    endlocal

    Не сильно изящно, но что в голову пришло первым. Для вырезания 1-ой строки может хватить...

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 03:24 01-06-2010
    wolf0425



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

    Цитата:
    как в батнике при запросе команды  на подтверждение команды ответить НЕТ автоматически.
     copy /-y c:\1\doc.exe c:\2\doc.exe  дальше сообщенные о командной строки заменить существующий файл? и нам надо ответить НЕТ.
    echo n |  copy /-y c:\1\doc.exe c:\2\doc.exe  
    но чем прикручитьвать отправку N лучше бы прикрутить проверку наличия c:\2\doc.exe  перед копированием:

    Код:
    if not exist c:\2\doc.exe  copy c:\1\doc.exe c:\2\doc.exe

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:55 01-06-2010
    sjsash

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Ты просто "мой герой" . Такое ощущение что ты один отвечаеш на мои вопросы по существу
    Цитата:
    в простых случаях  - так: echo y | format a:
    Это я так понял форматирование диска А без запроса. Например сравнение файлов командой Comp с автоматическим ответом после сравнения "n" (типа больше не сравнивать файлы) будет код
    Код:
     echo n | comp "C:\logfile.log" "D:\Log\logfile1.log"  
    ???

    Всего записей: 14 | Зарегистр. 13-11-2009 | Отправлено: 13:10 01-06-2010 | Исправлено: sjsash, 18:25 01-06-2010
    TTTT555

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста код батника.  
    Имеется 2 сетевых адаптера. Один с ip-адресом, начинающимся на 10ку, второй с ip-адресом, начинающимся на 192.  
    Надо чтобы при запуске, он записывал ip-адрес, начинающийся на 192 в текстовый файл.  
    А при повторном запуске сравнивал текущий ip-адрес с тем что записан в тхт-файле, и в случае изменений запускал бы сторонний екзешник на исполнение, где в качестве параметра был бы указан новый ип-адрес и попутно перезаписывал бы ип-адрес в тхт-файле.

    Всего записей: 23 | Зарегистр. 31-05-2009 | Отправлено: 18:28 01-06-2010
    Ortios



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, igor_andreev
    Каюсь, накосячил. С учетом поступившей конкретики привожу правильный вариант.

    Код:
    sed -e :a -e "/b/{s/.*d.*\n//;N;ba}"

    Похоже, это шедевр, даже самому понравилось! Превзошел встроенный /start/,/end/
    igor_andreev
    Тоже всегда пользуюсь supersed, но параметр M, как-то ускользнул от внимания, надо будет посмотреть, что за зверь. Как раз на носу отпуск
     
    ps. Оперативно отвечать не могу, или не всегда могу.

    Всего записей: 73 | Зарегистр. 24-12-2007 | Отправлено: 20:42 01-06-2010 | Исправлено: Ortios, 23:19 01-06-2010
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TTTT555
    Насколько я понял постановку задачи...
    IpChangeDetector.cmd
    Код:
    @echo off
    REM первые 2 set'а нуждаются в подгонке под конкретную систему
    REM имя интерфейса на котором отслеживаем изменения
    REM и "детектор" строки с адресом в выдаче команды netsh (зависит от локализациии и возможно версии ОС)  
    set "INTERFACE=Подключение по локальной сети"
    set "DETSTRING=IP-адрес"
     
    set "LOGFILE=%~dp0IpChange.log"
    set "OLDIPFILE=%~dp0OldIp.tmp"
    set "PROGTORUN=c:\Path To\Your.exe"
    for /f "tokens=2" %%A in ('netsh interface ipv4 show config "%INTERFACE%"^|find /I "%DETSTRING%"') do set CURRIP=%%A
    if NOT EXIST "%OLDIPFILE%" (call :FRUN) else (call :NRUN)
    goto :EOF
     
    :FRUN
    echo IP Change Detector for interface "%INTERFACE%" first started at %DATE% %TIME% >"%LOGFILE%"
    echo Current IP is %CURRIP%>>"%LOGFILE%"
    echo %CURRIP%>"%OLDIPFILE%"
    goto :EOF
     
    :NRUN
    call :GETOLDIP
    if %OLDIP% == %CURRIP% goto :EOF
    echo IP change from %OLDIP% to %CURRIP% detected at %DATE% %TIME%>>"%LOGFILE%"
    echo %CURRIP%>"%OLDIPFILE%"
    start "Running Your Program" "%PROGTORUN%" %CURRIP%
    goto :EOF
     
    :GETOLDIP
    for /f %%B in (%OLDIPFILE%) do set OLDIP=%%B
    goto :EOF

    Вставить в шедулер винды с необходимой периодичностью (хоть раз в секунду )
    При запуске производится сравнение текущего IP на отслеживаемом адаптере с предыдущим (из файлика %OLDIPFILE%), при наличии расхождения - делается запись в лог, изменяется адрес в %OLDIPFILE% на текущий и запускается программа %PROGTORUN%.
    Отлаживалось на Vista x64 Rus...
    Hint: для очистки логов (при следующем запуске) достаточно удалить файлик %OLDIPFILE%

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 00:15 02-06-2010 | Исправлено: BorlandIMHO, 00:31 02-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...Доброго дня всем.
     
    Подскажите пож-ста - как сделать что бы только 1-го числа каждого месяца в 06:00 команда "call" выполнялась?
    Все-таки не хочется планировщиком пользоваться...
     
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 07:17 02-06-2010 | Исправлено: Mark_Titov, 08:06 02-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mark_Titov
    работа как раз для планировщика.
    По каким соображениям не хочется использовать планировщик? Видимо что-то религиозное

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



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

    Цитата:
    Видимо что-то религиозное

    ...Наверное не так вопрос поставил.
     
    Сделал код который делает отчеты в файл txt в течении месяца. Отчеты выглядят так -

    Код:
    Средне-арифметический процент потери связи за 01.06.2010 составил - 25%
    Средне-арифметический процент потери связи за 02.06.2010 составил - 0%
    Средне-арифметический процент потери связи за 03.06.2010 составил - 50%
    Средне-арифметический процент потери связи за 04.06.2010 составил - 0%
    Средне-арифметический процент потери связи за 05.06.2010 составил - 100%
    ...и т.д. до конца месяца

    ...нужно 1-вого числа каждого месяца даже наверное в последний день каждого месяца с учетом высокосного года в 06:00 вычислять Средне-арифметический процент из всего этого списка и в писывать последней строчкой сообщение типа -

    Код:
    Средне-арифметический процент потери связи за 06.2010 составил - 29%

    Все это будет в одном файле...
    Потому и не годится тут планировщик...
    Задача не из легких конечно, понимаю - но я с этим не справлюсь...
    В шапке топика нашел "Использование даты на день раньше чем сегодня (учитываются високосные годы)", но не знаю как его в моем варианте в целом использовать...
    Потому и прошу помощи у вас...
     
    Буду благодарен если поможете...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 09:12 02-06-2010 | Исправлено: Mark_Titov, 09:40 02-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mark_Titov
    Все таки планировщик для того и придумали чтоб запускать задачи в заданное время и с заданной периодичностью. Если ты найдешь способ делать это как-то по другому, то это будет другой планировщик.
    Из твоего объяснения не понятно, почему нельзя запустить расчет из планировщика.
    Предполагаю, что твой код в параметрах принимает дату расчета или что-то в этом роде. В этом случае можно написать обвязку в виде бат файла, которая будет запускать твой код с нужными параметрами. Запуск батника вставить в планировщик.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:39 02-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