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

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



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JonyRico
    del /q /s /f forexample.doc

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:34 20-03-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir код работает
    1000 строк за 45 минут сделал
    спасибо огромное
     
    если Вы не против еще задачка
     
    есть файл
    1.xml

    Код:
     
    <?xml version="1.0"?>
    <mcs>
    .......
                    <internal list_of_libraries="ikeyOLD.dll, wbproxy.dll">
    .......
     

    интересует выделенная строка
    она может быть другая     <internal list_of_libraries="ikeyLD.dll, wbproxy.dll">
    необходимо добавить под ковычки msproxy.dll
    чтобы получилось так <internal list_of_libraries="msproxy.dll, ikeyOLD.dll, wbproxy.dll">
    либо так                     <internal list_of_libraries="msproxy.dll, ikeyLD.dll, wbproxy.dll">
    можно подменить правую часть строки после = по таким критериям
    если в правой части после = есть ikeyOLD.dll то на "msproxy.dll, ikeyOLD.dll, wbproxy.dll">
    если в правой части после = есть ikeyLD.dll то на "msproxy.dll, ikeyLD.dll, wbproxy.dll">
    если в правой части после = есть msproxy.dll то ничего не делать
    еще эти имена файлов ikeyOLD.dll, wbproxy.dll могут быть поменяны местами
                                       wbproxy.dll, ikeyOLD.dll либо написаны в другом регистре, но разделены запятой
     
    спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 17:05 20-03-2007 | Исправлено: JohnRD, 17:11 20-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnRD
    В шапке есть утилита GSar Набор GNU утилит для win32
    gsar -swbproxy.dll -rikeyOLD.dll,wbproxy.dll Source.txt Target.txt

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:16 20-03-2007 | Исправлено: KapralBel, 17:23 20-03-2007
    JohnRD

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

    Код:
     
    for /f "tokens=1,2 delims==" %%a in (1.xml) do if %%a=="<internal list_of_libraries" set "right_parts=%%b"
    type 1.xml | find "msproxy.dll" && goto :EOF
    type 1.xml | find "ikeyOLD.dll" && goto OLD
    type 1.xml | find "ikeyLD.dll" && goto LD
     
    LD
    gsar -s"%right_parts%" -r""msproxy.dll, ikeyOLD.dll, wbproxy.dll">" -F >2.xml
     
    :LD
    gsar -s"%right_parts%" -r""msproxy.dll, ikeyLD.dll, wbproxy.dll">" -F >2.xml
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 17:47 20-03-2007 | Исправлено: JohnRD, 17:52 20-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnRD
    Вариантов конечное и небольшое число?
    Вот и перечисли их все последовательно

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



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

    Всего записей: 180 | Зарегистр. 04-06-2004 | Отправлено: 18:14 20-03-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    qEraser
    Зачем дублируешь темы?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 18:22 20-03-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
     
    <internal list_of_libraries="ikeyOLD.dll, wbproxy.dll">
     

    Код:
     
    for /f "tokens=1,2 delims==" %%a in (1.xml) do if "%%a"=="<internal list_of_libraries" set "right_parts=%%b"
     

     
    > was unexpected at this time.
     
    cmd не работает с этими < > символами как быть ?
    вернее как сделать чтоб он их не воспринимал
     
    еще вопрос
    gsar можен при поиске не воспринимать регистр
     
    type 1.xml | gsar -s"ikeyOLD.dll" -r .....
    если будет ikeyold.dll или IKEYOLD.DLL      

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 19:30 20-03-2007 | Исправлено: JohnRD, 19:51 20-03-2007
    igor_andreev

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

    Цитата:
    cmd не работает с этими < > символами как быть ?

    Ответ сам-собой напрашивается - ну и не трогай их, символы эти...

    Код:

    gsar -s"internal list_of_libraries=\"ikeyLD.dll, wbproxy.dll\"" -r"internal list_of_libraries=\"msproxy.dll, ikeyLD.dll, wbproxy.dll\"" 1.xml 2.xml
    gsar -s"internal list_of_libraries=\"ikeyOLD.dll, wbproxy.dll\"" -r"internal list_of_libraries=\"msproxy.dll, ikeyOLD.dll, wbproxy.dll\"" 2.xml 3.xml

     

    Цитата:
    еще вопрос  
    gsar можен при поиске не воспринимать регистр  

    Ну вообще то у gsar.exe встроенный хелп есть и там написано:
    -i         Ignore case difference when comparing strings
     
    На всяк случай, gsar у меня последний, 1.20 отсюда(пять дней назад зарелизили)
     
     
    Добавлено:
    Только заметил , заменяемая часть строки одинаковая в обоих случаях, что у ikeyLD.dll, что у ikeyOLD.dll:
    internal list_of_libraries="ikey
    и туда надо вставить msproxy.dll, можно вообще одной строчкой обойтись

    Код:

    gsar -s"internal list_of_libraries=\"ikey" -r"internal list_of_libraries=\"msproxy.dll, ikey" 1.xml 2.xml


    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 20:07 20-03-2007 | Исправлено: igor_andreev, 20:39 20-03-2007
    Wise_Kaa



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос такой: как назначить переменной текущий ip-адрес машины, так сказать с наименьшими затратами? мне на ум приходит только просмотр с помощью ipconfig, а дальше уже анализ полученной информации. Но вот анализ, как упростить? Или может есть какая-то пременная?
    Прошу прощения, если такой вопрос уже был, я просто его не нашел на форуме.
    P.S. вообще задача стоит следующая: есть сеть, в ней 254 машины. Сеть вида 192.168.1.0, надо сделать 192.168.2.0, т.е. третий октет должен смениться с 1 на 2. Как это проще всего сделать?

    Всего записей: 59 | Зарегистр. 04-01-2006 | Отправлено: 21:02 20-03-2007
    MegaSin

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

    Код:
     
    @echo off
    set mdquery=123 -h 12 --port=32 -u12 --password=32
     call :xz %mdquery% -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
    pause & goto :eof
     
    :xz
    echo %*
    for /f "tokens=1,2,3 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set test=%%c)
    echo %first%
    echo %second%  
    if DEFINED test echo %test%
    :eof
     

    Проблема заключается в том, что вывод %first% представляет собой
    123 -h 12 --port 32 -u12 --password 32 -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"
    т.е потерялись все знаки равно....
    при выводе %* знаки есть...
    как быть?

    Всего записей: 25 | Зарегистр. 26-11-2006 | Отправлено: 22:47 20-03-2007
    Smitis



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

    Цитата:
    cmd не работает с этими < > символами как быть ?

    Ставить перед ними символ ^

    Всего записей: 2435 | Зарегистр. 09-02-2003 | Отправлено: 22:52 20-03-2007
    Elroir



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

    Цитата:
    как назначить переменной текущий ip-адрес машины, так сказать с наименьшими затратами?


    Код:
     
    for /f "usebackq tokens=2* delims=-.: " %%a in (`"ipconfig | find "IP""`) do set "net=%%b"
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:01 20-03-2007 | Исправлено: Elroir, 23:15 20-03-2007
    igor_andreev

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

    Цитата:
    потерялись все знаки равно

    Ну и решай в лоб, чтоб с заменами не морочиться - возьми, да и перенеси set mdquery= в метку :xz, кому она там у тебя в начале батника нужна?
     

    Код:
     
    @echo off  
     
    call :xz -e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init  
    pause & goto :eof  
       
    :xz  
    set mdquery=123 -h 12 --port=32 -u12 --password=32
    for /f "tokens=1,2,3 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set test=%%c)
    echo %mdquery%
    echo %first%  
    echo %second%  
    if DEFINED test echo %test%  
    :eof
     

     
    P.S. Знать бы еще, что-ты такое хитрое пишешь, точнее бы можно было подсказать...
     
    Добавлено:
    Хотя судя по

    Цитата:
    просто батник на 1700 строк это слишком, вот решил сделать поменьше, убрать лишнее

    это наверное будет маленькая операционная система

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 23:16 20-03-2007 | Исправлено: igor_andreev, 23:31 20-03-2007
    MegaSin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Цитата:
    P.S. Знать бы еще, что-ты такое хитрое пишешь, точнее бы можно было подсказать...

    Пишу (точнее уже написал) интерфейс для работы с двумя базами данных mysql
    Проблема в том.. то что я и в запросе могу послать знак равенства...
    вроде такого
    call :sqlquery %mserver% -D %msdb% -e "SELECT `name` FROM `character` WHERE account = '%%i'"/Search/2.txt
    А если внутри запроса пропадёт знак... мускул выругается и есс-но ничего не возвратит
    странно что он выкидывает знаки.... только что обнаружил что и запятая тоже выкидывается  
    ЗЫ: если нужно могу выложить всю программу

    Всего записей: 25 | Зарегистр. 26-11-2006 | Отправлено: 00:01 21-03-2007 | Исправлено: MegaSin, 00:03 21-03-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MegaSin
     
    Цитата:
    Проблема в том.. то что я и в запросе могу послать знак равенства...

    Вообще, самое оптимальное, чтоб уменьшить размер батника и увеличить скорость работы - уменьшить количество всяких call и goto(да кажется в любом языке программирования), пользоваться по мере возможности enabledelayedexpansion

    Цитата:
    если нужно могу выложить всю программу

    Ой, в mysql я точно ни ухом, ни рылом, ни в зуб ногой, ни бум-бум
     

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 00:27 21-03-2007 | Исправлено: igor_andreev, 00:33 21-03-2007
    MegaSin

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

    Всего записей: 25 | Зарегистр. 26-11-2006 | Отправлено: 00:38 21-03-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да все можно решить, если рогом упереться и на принцип пойти Хотя я бы уже давно этот батник начал на vbscript переделывать. Сделай call c %mdquery% в кавычках и отдели ее тоже слешем. А в метке :xz убери первую и последнюю букву, кавычки то есть и уберутся(set first=%first:~1,-1%)
     

    Код:
     
    @echo off  
    set mdquery=123 -h 12 --port=32 -u12 --password=32
    call :xz "%mdquery%"/-e "SELECT `name`,(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1177), ' ', -1)+0) AS `money`"/init
    pause & goto :eof  
       
    :xz
    for /f "tokens=1,2,3,4 delims=/" %%a in ('echo %*') do (set first=%%a&set second=%%b&set third=%%c&set test=%%d)  
     
    set first=%first:~1,-1%
     
    echo %first%  
    echo %second%  
    echo %third%  
    if DEFINED test echo %test%  
    :eof
     

     
    Добавлено:
    А в каком месте запятая выкидывается, не увидел?

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 01:25 21-03-2007
    MegaSin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    спс, уже сам переделал.... немножко по другому
    А запятая выкидывается если не "закавычить" строку
    Итог - уменьший на 400 строк батничек свой!
    Всем спасибо

    Всего записей: 25 | Зарегистр. 26-11-2006 | Отправлено: 01:44 21-03-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qEraser
    Возможно, только конкретизируй задачу. Т.е. в виде конкретного примера опиши проблему.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 07:30 21-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