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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jeka Str
     
    Приведи лог. netsh interface ip show ipaddress
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:42 27-03-2007
    KapralBel



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

    Цитата:
    Это просто, а вот как не мусорить?

    А удалить файл после обработки?
     
    Jeka Str

    Код:
    @Echo Off
    Set IP=192.168.0.0
    ipconfig | find "192.168.0" >Temp.tmp
    CHCP 1251
    For /F "tokens=1-2 delims=:" %%a in (Temp.tmp) Do Call :ip "%%a" %%b
    Echo IP=%IP%
    Del Temp.tmp /q
    GoTo :EOF
     
    :ip
    IF /I "        IP-адрес  . . . . . . . . . . . . " == %1 Set ip=%2
    GoTO :EOF

     
    батничек должен быть в кодировке ANSI (1251)

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:02 27-03-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    Jeka Str
     
    Тогда зачем Temp.tmp ?
     

    Код:
     
    @Echo Off
    CHCP 1251 > nul
     
    For /F "tokens=1-2 delims=:" %%a in ('ipconfig') Do Call :ip "%%a" %%b
    Echo IP=%IP%
    GoTo :EOF
     
    :ip
    IF /I "        IP-адрес  . . . . . . . . . . . . " == %1 Set ip=%2
    GoTO :EOF
     

     

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



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    А случай когда 2 и более соединений?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:39 27-03-2007
    NIKZZZZ



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

    Цитата:
    А случай когда 2 и более соединений?

    С помощью if найти нужное.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:44 27-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    Через фильтрацию более изящное решение

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:48 27-03-2007
    NIKZZZZ



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

    Цитата:
    Через фильтрацию более изящное решение

    Может быть, мне просто не нравится сама идея передачи данных через файл.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:51 27-03-2007
    Maza Faka



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

    Код:
     
    @Echo off
    For /F "Skip=7 Tokens=1* Delims=" %%a in ('Ipconfig') do (
    For /F "Delims=: Tokens=1,2" %%k in ("%%a") do (
    If "%%l"==" 192.168.0.1" (
    Set "OldIp=%%l"
    )
    )
    )
    Echo %OldIp%
     

     
    В переменной  %OldIp% будет текущий IP адрес (192.168.0.1), дальше можно и к шедулеру прикрутить
     
    Добавлено:
    Вот написал, как смог правда проверить нет возможности, кто проверит отпишитесь плз...

    Код:
     
    @Echo off
    Chcp 1251
    For /F "Skip=7 Tokens=1* Delims=" %%a in ('Ipconfig') do (
    For /F "Delims=: Tokens=1,2" %%k in ("%%a") do (
    If "%%l"==" 192.168.0.1" Goto ChangeIP1
    If "%%l"==" 192.168.0.2" Goto ChangeIP2
    )
    )
    Goto :EOF
    :ChangeIP1
    netsh interface ip Set address name="Подключение по локальной сети" source=static addr=192.168.0.2 mask=255.255.255.0
    Goto :EOF
    :ChangeIP2
    netsh interface ip Set address name="Подключение по локальной сети" source=static addr=192.168.0.1 mask=255.255.255.0
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:06 27-03-2007 | Исправлено: Maza Faka, 16:21 27-03-2007
    5ar5



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть ли способ запустить службу RemoteAccess с командной строки, если текущее значение параметра "Тип запуска" - Отключено; "Состояние" - ""?  
    Пробовал сделать следующие:
     
    reg add HKLM\System\CurrentControlSet\Services\RemoteAccess /v Start /t REG_DWORD /d 0x00000002
     
    sc start RemoteAccess
     
    После выполнения первой команды параметр "Тип запуска" меняется с состояния "Отключено" на "Авто" в Службах и приложениях.  
    В результате выполнения последней команды получаю сообщение: [SC] StartService FAILED 1058:
     
    Если меняю значение параметра "Тип запуска" руками в Службах и приложениях с "Отключено" на "Авто", а потом в командной строке выполняю команду - sc start RemoteAccess, то служба запускается нормально.

    Всего записей: 36 | Зарегистр. 23-02-2006 | Отправлено: 16:31 27-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    5ar5
    Попробуй сделать задержку на 3-4 секунда
    есть подозрение что до винды еще не дошло что разрешен запуск службы

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:39 27-03-2007
    Jeka Str

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот монстры! Спасибо всем сделал по первому примеру добавил несколько if (меняю между 4 адресами) c метками тоже прикольно.

    Всего записей: 6 | Зарегистр. 27-03-2007 | Отправлено: 16:44 27-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Jeka Str
    Есть еще один вариант - на любителя. Если список вариантов ограничен, то можно создавать временные файлы с уникальными именами, которые будут указывать на текущий IP
     
    Но это для того случая если информацию получить нельзя

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:51 27-03-2007
    5ar5



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пробывал не получается...думаю что нужно еще что-то поменять, либо запускать как-то по-другому...программокой regshot увидел, что когда запускаешь руками, в реестре меняются три ветки:
     
    1.HKLM\SOFTWARE\Microsoft\SystemCertificates\SPC\Certificates\BFF30D77F17EF25562DA75ECEF9FF924DD8F8058\
     
    прамерт blob
     
    2. HKLM\SYSTEM\ControlSet001\Services\RemoteAccess\
     
    параметр Start
     
    3. HKLM\SYSTEM\CurrentControlSet\Services\RemoteAccess\
     
    параметр Start
     
    Менять все эти три значения я не хочу, т.к. первый из них скорее всего будет отличаться на разных компах. Да и во всех статьях, хелпах и т.д. вроде написано что нужно запускать службы через ветку HKLM\SYSTEM\CurrentControlSet\Services\RemoteAccess\.

    Всего записей: 36 | Зарегистр. 23-02-2006 | Отправлено: 16:53 27-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    5ar5
    Попробуй sc config имяслужбы start= auto

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:37 27-03-2007
    Maza Faka



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

    Цитата:
    Вот монстры! Спасибо всем сделал по первому примеру добавил несколько if (меняю между 4 адресами) c метками тоже прикольно.

     
    Как именно сделал? Выложи код если не трудно...кстати мой пример пробовал? Я потестил, работает...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:48 27-03-2007
    5ar5



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    Спасибо. Все как всегда легко и просто Читал в описание про эту команду, но почему то воспользоваться ей в голову не пришло.

    Всего записей: 36 | Зарегистр. 23-02-2006 | Отправлено: 18:00 27-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    мужики
    имя каталога содержит точки, в нем запускается такая конструкция
    for /f "tokens=1,2 delims=:." %%a in ("%cd%") do echo "%%~nxb"
    можно ли локально заставить отобразить точку несмотря на delims=. ???

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 22:51 27-03-2007
    Elroir



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

    Код:
     
    for /f "tokens=1* delims=:." %%a in ("%cd%") do echo "%%~nxb"
     

    Если не получится - приведи пример каталога (полный путь) и то, что надо получить.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:16 28-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    получилось, спс, принцип понял, ща накручивать буду, если получится
    пока я победил задачу, но сценарием, а в идеале, хотелось бы одной командой, вот и ищу способы, чтобы укоротить строку, пока вижу только один выход, заменой двух for'-ов на один универсальный, а то два for'-а, пути и много параметров делают свое гадкое дело...
     
    Добавлено:
    интересно, а можно ли втыкать переменные два раза тело цикла?
    типа for /f %%a… %%i.… ?
     
    Добавлено:
    полная победа, задача решена, огромный респект

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 03:00 28-03-2007
    Jeka Str

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Че то java скрипт не работает у меня в опере. Не могу цитаты вставлять.
     
    2Maza Faka. Поробовал твой пример. Он мне понравился больше тем, что не используется промежуточный файл, на нем и остановился. Для полного счастья отсалось расшивровать вот этот код:
    For /F "Skip=7 Tokens=1* Delims=" %%a in ('Ipconfig') do (  
    For /F "Delims=: Tokens=1,2" %%k in ("%%a") do ( .....
    и будет мне счастье Кстати где про это можно прочитать, сколько читал про операторы cmd ни чего подобного не встречал.

    Всего записей: 6 | Зарегистр. 27-03-2007 | Отправлено: 07:33 28-03-2007 | Исправлено: Jeka Str, 07:39 28-03-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru