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

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



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

    Цитата:
     Для полного счастья осталось расшифровать вот этот код:  
    For /F "Skip=7 Tokens=1* Delims=" %%a in ('Ipconfig') do (  
    For /F "Delims=: Tokens=1,2" %%k in ("%%a") do ( .....

     
    Рад, что мой батник тебе помог , я сам ими увлёкся недавно...значит в первой строке мы запускаем команду "Ipconfig" и обрабатываем её вывод как строку, пропускаем 7 строк сверху, берём все лексемы (слова, элементы), которые разделены пробелами и присваивем переменной "%%a", во второй строке, разбираем вывод окончательно, то есть указываем, что разделителями являются символы ":", используем две лексемы (до разделителя ":" и после) и используем оператор сравнения, что бы вывести нужную нам лексему...
    А почитать можно (нужно) такую литературу:
     
    Попов А. В.
    "Командные файлы и сценарии Windows Script Host"
     
    Уильям Р. Станек  
    "Командная строка Microsoft Windows Справочник администратора"
     
    Ну и конечно почаще посещать эту ветку!
     
     
     
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:28 28-03-2007
    Jeka Str

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромный сенкс. Буду заглядывать почаще. Вообще я не подозревал что командная строка виндоус умеет такое делать. Считал её более примитивной. Как видно ошибался.

    Всего записей: 6 | Зарегистр. 27-03-2007 | Отправлено: 09:39 28-03-2007
    evle



    1 + int rand(100);
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    NIKZZZZ
    Jeka Str
    Дабы использовать в for конструкцию, содержащую запрещённые символы (<, >, |, "), перед этими символами надо ставить ^. Тогда не надо играться с файлами и проверкой условий.

    Код:
     
     For /F %%a in ('Ipconfig ^| find "1.1.1.1" ') do ( ...
     


    ----------
    For every complex problem, there is a solution that is simple, neat, and wrong.

    Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 18:56 28-03-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    evle
    Молодец! Я тоже так делал, но батник постоянно выдавал ошибку, потому, что не было знака "^" перед спец символом...и как я не догадался его использовать, воистину RTFM , но разбор всё же нужен:

    Код:
     
    @Echo off
    For /F "Tokens=1,2 Delims=:" %%i in ('Ipconfig ^| Find "192.168.0.10"') do Echo %%j
     


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:41 28-03-2007 | Исправлено: Maza Faka, 19:41 28-03-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evle
    А может ты знаешь, как решить такую проблему:
     
    For /F %%i in ('call :xx ') do ( ...  
    ......
    :xx
    ......
     
    Естественно без второго батника.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 23:16 28-03-2007 | Исправлено: NIKZZZZ, 23:17 28-03-2007
    Elroir



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

    Код:
     
    @echo off
    if "%1"=="xx" goto :xx
    for /f "usebackq" %%a in (`"%0 xx"`) do (
    ...
    ...
    ...
    )
    goto :EOF
    :xx
    rem Here your code
    ...
    ...
    ...
     

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



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

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у меня есть gif файл с именем 1234567.gif
    мне надо запустить другой батник с параметром 1234567,
    короче как считать имя файла

    Всего записей: 2 | Зарегистр. 29-03-2007 | Отправлено: 11:16 29-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndreyDanilik
    for /f %%a in ("1234567.gif") do echo %%~na  сценарий
    for /f %a in ("1234567.gif") do echo %~na  команда

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:29 29-03-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Знатоки бат файлов, подскажите:
    1 У меня работает
    Код:
    set /a summ=SFXsize+delta
    set /a Hpers=delta*100/summ
    set /a Lpers=delta*1000/summ-Hpers*10
     
    , а так не работает
    Код:
    set /a Hpers=delta*100/(SFXsize+delta)
    set /a Lpers=delta*1000/(SFXsize+delta)-Hpers*10
     
    Почему? И как тогда можно/нужно использовать скобки?
    2 Можно ли из бат файла узнать текущее разрешение экрана?
    3 Здесь где то находил ссылку на некий компилятор для бат файлов, но ссылка на него дохлая. Что это такое и где его можно скачать/познакомиться поближе?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 08:23 30-03-2007 | Исправлено: GORA2, 08:28 30-03-2007
    igor_andreev

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

    Цитата:
     а так не работает

    У меня оба примера почему-то работают

    Цитата:
    Можно ли из бат файла узнать текущее разрешение экрана?  

    Стандартно - только используя WSH. Если религией\родителями\начальником не возбраняется использовать сторонние утилиты, то в шапке есть "Полезные ссылки", там cmdow.exe, а на ейной домашней странице есть "Batch file to retrieve display resolution". Или scrnres.exe с примером батника http://www.jsifaq.com/SF/Tips/Tip.aspx?id=08621

    Цитата:
    3 Здесь где то находил ссылку на некий компилятор для бат файлов, но ссылка на него дохлая.

    В гугле набери что-нить типа "compile batch file", полно всяких прог найдешь
     
     

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 13:30 30-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    сам ищю давно нормальный компилятор, но пока самый лучший, что нашел дает размер модуля 50 кб, это многовато, может ты знаешь более менее нормальный по размерам откомпилированного файла криптор?

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    В Exescript версии 2.1.1 (случайно валяется у меня такая) модуль script.pe весит 8.5 Кб. Если заменить иконку в нем ResHacker-ом на иконку стандартного консольного приложения, то будет добавлять к батнику 5 Кб. Тема в варезнике есть, могу там эту версию выложить, если не найдешь (сам наверное знаешь на каких сайтах искать )
     
    Сам иногда пользовался cmd2exe, у нее особо никаких функций нет, даже код не скрывает, но мне нужна была тулза, которая бы передавала батнику(его почти все проги в TEMP создают) свое местонахождение, чтобы прочитать ini-iшник рядом с exe. А то в батнике %0 не так, как надо отрабатывали. Вроде как обещали в Exesript версии 3 сделать такую функциональность, в качестве рабочей папки задать ту, где экзешник лежит, не пробовал еще.

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 15:10 30-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    аха 8.5 кб приемлемо, иконку замочим или заменим, если надо , кинулся искать, если не найду дам знать
     
    Добавлено:
    только недавно тестил exescript 3.0.0.0 там размер ~ 50 кб

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:57 30-03-2007 | Исправлено: Nagual, 17:23 30-03-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не знаю занимался ли кто из Вас работой с реестром , но перед мной стоит такая задача:
    Нужно из реестра считать данные и заменить их в зависимости от условий , потом благополучно записать назад.Метод должен быть автоматическим.
    Реальный пример:
    В HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
    \DosDevices\С:
    нужно заменить на
    \DosDevices\Y:  
    Остальные параметры , типы значений , как и сами они этого ключа должны остаться прежними.

    Всего записей: 3930 | Зарегистр. 22-11-2006 | Отправлено: 03:53 31-03-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    euheny
      REG QUERY /?
      REG ADD /?
      REG DELETE /?
      REG COPY /?
      REG SAVE /?
      REG RESTORE /?
      REG LOAD /?
      REG UNLOAD /?
      REG COMPARE /?
      REG EXPORT /?
      REG IMPORT /?
    igor_andreev
    нашел в андеграунде версию 2.1.1 от охотника на людей, но вылетает у меня при добавлении файла.
    а так в демоверсии добавил сценарий размером 692 байт (692 байт) и размер файла на выходе составил 16 кб имхо про третью версию молчу, ибо а зачем нам кузнец?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 04:41 31-03-2007 | Исправлено: Nagual, 04:45 31-03-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    euheny
    Так как я понял:
    1. Читаем значение и тип \DosDevices\С:
    2. Создаем \DosDevices\Y: с тем же значением и типом данных.
    3. Удаляем \DosDevices\С: (закомментировано в батнике)
     

    Код:
     
    @echo off
    setlocal
    set "first_key=\DosDevices\C:"
    set "second_key=\DosDevices\Y:"
    rem Читаем значение и тип первого ключа
    for /f "usebackq skip=2 tokens=2,3" %%a in (`"reg query HKLM\SYSTEM\MountedDevices /v %first_key%"`) do (
    set "first_key_type=%%a"
    set "first_key_value=%%b"
    )
    rem Записываем иx в второй ключ. Если он не существует - создаем его.  
    reg add HKLM\SYSTEM\MountedDevices /v %second_key% /t %first_key_type% /d %first_key_value% /f
    rem Если надо - удаляем первый ключ
    rem reg delete HKLM\SYSTEM\MountedDevices /v %second_key% /f
     

    Я думаю проверку и сравнение ты сам сделаешь
    P.S. Утилита reg.exe присутствует по умолчанию в Windows XP/2003. В Win2K ее нет.

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



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

    Всего записей: 3930 | Зарегистр. 22-11-2006 | Отправлено: 05:40 31-03-2007
    Elroir



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:21 31-03-2007
    SPV_Ed



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в пакетном файле в цикле for /f в качестве разделителя задать символ ковычки?
    "delims="" и "delims=^"" не подходит...

    Всего записей: 474 | Зарегистр. 20-06-2006 | Отправлено: 23:02 31-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