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

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

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

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    ой-йо, мне точно сгодится. Ибо делаю и там и там. В лине красивее получаецца. С секундами очень просто. Заранее большая спасиба.

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 17:34 11-10-2010
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
    Хочу автоматизировать процес:
    В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} проверить все подразделы этой ветки на наличие в их подразделе "Connection" переменной "Name", значение которой равно известному нам заранее значению (к примеру "Подключение по локальной сети"), и если такая переменная есть берём в качестве результата название этого подраздела.
    Я пока застрял на первом этапе....(((
    Делаю так:

    Код:
    reg query HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /v Name /s /f "Подключение по локальной сети" /d /c /e

    Возвращает все значения "Name" найденные в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}
    Делаю так:

    Код:
    reg query HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /s /f "Подключение по локальной сети" /d /c /e

    Возвращает всё что равно "Подключение по локальной сети"
    Подскажите пожалуйста, как можно реализовать для начала хотя-бы первый этап?
    Заранее благодарен!!!

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 18:32 11-10-2010
    01MDM



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

    Код:
     
    @echo off
    setlocal
    1>nul chcp 1251
     
    set "regroot=HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"
     
    for /f "tokens=3*" %%i in ('reg query "%regroot%" /s ^| findstr "Name"') do echo %%i %%j
     
    1>nul chcp 866
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:11 11-10-2010
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:20 11-10-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ссылку прямую получи и качай

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 01:31 12-10-2010
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 08:24 12-10-2010
    Maximus777

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

    Код:
    @echo off
    for /r %%i in (.) do (
    @echo %%i
    for %%j in (%%i\*.*) do (
    @echo %%~nj%%~xj
    ))

    Скажите, как избавиться от пути до папки, в которой запускается батник? Т.е. щас генерируется такая запись:

    Код:
    E:\bla-bla-bla\distr\Setup\MiscSetup\.

    а хотелось бы так:

    Код:
    Setup\MiscSetup

    Точка и слеш тоже лишние в конце. Запуск происходит в папке distr

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 10:36 12-10-2010 | Исправлено: Maximus777, 11:36 12-10-2010
    Iacoyn



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, как с помощью bat файла менять строку известной длины в xml файле?
    Нужно для двух задач:
    1 Всем известный Kerio winroute.cfg
    нужно менять например
    TW311-GQ49Y на что-нибудь такое же. Значение может быть разным, но той же структуры.
    <config>
    <table name="License">
      <variable name="TrialId">TW311-GQ49Y</variable>
    </table>
    2 Skype
    нужно менять/создавать в папке настроек пользователя в файле shared.xml
    следующее
       <Connection>
          <DisablePort80>1</DisablePort80>
          <DisableUPnP>1</DisableUPnP>
          <ListeningPort>8888</ListeningPort>
          <Port>8888</Port>
        </Connection>
    причём между этими параметрами могут быть любые строки, а значение портов в данном файле Skype у каждого по умолчанию Random.
    Для меня задача слишком тяжёлая

    Всего записей: 2383 | Зарегистр. 07-05-2002 | Отправлено: 10:55 12-10-2010
    king_stiven

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

    Код:
    mode con codepage select=1251 > nul
    :begin
    set /a sum+=1
    if /i "%~d0\" neq "%cd%" (
        cd ..
        goto begin
    )
    setlocal enabledelayedexpansion
    set blok=!sum!
    setlocal DISABLEDELAYEDEXPANSION
    for /f "usebackq tokens=*" %%d in (`dir "%~dp0"/o /s /b /a:d`) do (
        for /f "tokens=%blok%* delims=\" %%e in ("%%d") do echo %%f
    )

     
    Добавлено:
    Iacoyn
    sed ом, но копаться в нём не буду, тяжело

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:10 12-10-2010 | Исправлено: king_stiven, 11:20 12-10-2010
    res2001



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

    Цитата:
    а хотелось бы так:  


    Код:
    @echo off
    set p=%~dp0
    call:ownerdir %p:~,-1%
    echo %ownerdir%\%~n0%~x0
    exit
     
    :ownerdir
    set ownerdir=%~n1%~x1
    exit /b

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:21 12-10-2010 | Исправлено: res2001, 11:21 12-10-2010
    Maximus777

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

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 11:25 12-10-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    упрощай, я выдрал свой пример из своей конкретной задачи

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:32 12-10-2010
    GORA2



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

    Цитата:
    но мудрёно ...


    Код:
    @echo off
    SetLocal enabledelayedexpansion
    for %%i in (%CD%) do Set msc=%%~dpi
    for /R %%i in (*.*) do (
        Set ti=%%i
        echo !ti:%msc%=!
    )
    Pause
     

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:08 12-10-2010
    Maximus777

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

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 13:29 12-10-2010
    wolf0425



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

    Цитата:
    нужно менять/создавать в папке настроек пользователя в файле shared.xml
    следующее
       <Connection>
          <DisablePort80>1</DisablePort80>
          <DisableUPnP>1</DisableUPnP>
          <ListeningPort>8888</ListeningPort>
          <Port>8888</Port>
        </Connection>  
    для замены одного параметра:

    Код:
    sed -r -i "/<Connection>/,/<\/Connection>/ s;(<DisablePort80>)[^<]*(</DisablePort80>);\11\2;gi" shared.xml

    для остальных - проще по аналогии еще 2 строки добавить, лениво думать как в одну впихнуть.
    над созданием (с проверкой отсутствия) думать тоже влом.
     

    Цитата:
    1 Всем известный Kerio winroute.cfg
    нужно менять например
    TW311-GQ49Y на что-нибудь такое же. Значение может быть разным, но той же структуры.
    <config>
    <table name="License">
      <variable name="TrialId">TW311-GQ49Y</variable>
    </table>  
    должно хватить такого:

    Код:
    sed -r -i "s;(<variable name=\x22TrialId\x22>)[^<]*(</variable>);\1ТоЧтоНадоВписать\2;gi" winroute.cfg

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:23 12-10-2010 | Исправлено: wolf0425, 16:26 12-10-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
    Вариант не совсем надежен, не будет корректно работать если в названии будет "!"
     
    Тоже вариант, но тоже не кошерный:

    Код:
     
    @echo off
    setLocal
     
    for %%i in ("%cd%") do set "curdir=%%~nxi"
    subst z: "."
    pushd z:
    for /r %%i in (*) do echo %curdir%%%~pnxi
    popd
    subst z: /d
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:24 12-10-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    спасибо и за такой вариант. Код от GORA2 у меня сработал не так, как мне надо. Но думаю трабл где-то не в коде. Вывод был с полными путями. Попробую ваш.

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 17:27 12-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    Доделал перевод даты/времени в секунды и назад:  
    тут

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:37 12-10-2010 | Исправлено: res2001, 20:37 12-10-2010
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    нехилый получился кусок кода. Спасибо. Может пригодится когда. С разбором обычной даты конечно коду меньше, пока его юзаю. В Линуксе зато кайф, просто опция команды и дата в секундах.
     
    Добавлено:
    Подскажите плиз, как надо правильно. Данный кусок не работает:

    Код:
    for /r %%i in (.) do (
    set curdir=%%i:~0,-1%
    echo %curdir%
    )

    Понимаю, что данную констркуцию можно заменить на %%~pni, но мне сам принцип внутри цикла интересен.
     
    И ещё вопрос. Как можно узнать, что каталог не содержит файлов? К примеру есть папка, а внутри неё только папки, файлов нет.

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 07:59 13-10-2010 | Исправлено: Maximus777, 10:07 13-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maximus777
    Цитата:
     
    Подскажите плиз, как надо правильно. Данный кусок не работает:  

    Со счетчиками внутри цикла и параметрами такая фишка не прокатывает. Надо предварительно присвоить переменной, а затем уже вырезать куски из нее.

    Код:
    SetLocal EnableDelayedExpansion
    for /r %%i in (.) do (
    set curdir=%%i
    set curdir=!curdir:~0,-1!
    echo !curdir!
    )

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru