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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Так... и как мне поставить ту кодировку?  а то у меня с того кода что ты прислал, получается какая то абракодабара
     
    Добавлено:
    ага стоп! понял, и разобрался.  
    ответ уже приходит в нуужной кодировке, мне её отслеживать не нужно.
    Вообщем второй вариант через IPCONFIG это то что мне нада. Спасибо большое. Скоро выложу сюда коды общей работы и небольшой концепт общего труда.
     
    Добавлено:
    Итак!  
    ЗАДАЧА:
    Создание астоматической настройки статических адресов привязанных к мак адресам сетевых адаптеров
    или
    Настройка IP по MAC в ручную.
     
    ЦЕЛЬ:  
    Установка сетевых настроек для локальной сети без использования ХОСТА доменов.
    Всё решается давольно просто двмя файлами.
    1. (autoconfig.bat) Определяет МакАдрес сетевой карты и вызывает одноименный фал настройки (этот файл всего один и является "движком").
    2. (00-04-4B-80-80-03.bat)Определяет политику сетевого адаптера (этих файлов будет столько, сколько машин в сети).  
     

    Код:
    [/code]
     
     
     
     
    Добавлено:
    МОДЕРАТОРЫ
    Если можете, поправте моё соогбщение, удалив лишнее
    --------------------------------------------------
    Итак!  
    ЗАДАЧА:
    Создание астоматической настройки статических адресов привязанных к мак адресам сетевых адаптеров
    или
    Настройка IP по MAC в ручную.
     
    ЦЕЛЬ:  
    Установка сетевых настроек для локальной сети без использования ХОСТА доменов.
     
    Всё решается давольно просто тремя файлами.
    1. (autoconfig.bat) Определяет МакАдрес сетевой карты и вызывает одноименный фал настройки (этот файл всего один и является "движком").
    2. (00-04-4B-80-80-03.bat)Определяет политику сетевого адаптера (этих файлов будет столько, сколько машин в сети).  
    3. (getmac.bat) Создание списка макадресов. (необходимо запстить на каждом компе в сети).
     
    Чаще всего в сети создаются унифицированные образы виндовса и после отката, приходиться настраивать виндовс в ручную.
    Теперь это можно автоматизировать.
     
    autoconfig.bat

    Код:
    @echo off
    cls
    setlocal
    for /f "tokens=1" %%i in ('getmac /nh') do (set mac=%%i.bat && goto:next)
       
    :next
    echo NET SETUP START
    echo %mac%
    call \\autoboot\autoconfig\%mac%.bat
    echo NET SETUP OWER
    pause
     

    тут определяется мак адрес текущей машины и вызывается файл настроек с именем макадреса. Тут необходимо править только строку
    call \\autoboot\autoconfig\%mac%.bat
    в каторой указывается путь к файлам настройки.
     
     
    00-04-4B-80-80-03.bat

    Код:
    @echo off
    rem УСТАНОВКИ СЕТИ
    setlocal
    set IP_=192.168.0.34
    set MASK_=255.255.255.0
    set SOCKS_=192.168.0.254
     
    ipconfig
    chcp 1251 1>nul
    for /f "tokens=*" %%i in ('ipconfig ^| findstr "Ethernet"') do call:parse "%%i"
    chcp 866 1>nul
    goto:eof
     
    arse
    set nname=%~1
    set nname=%nname: - Ethernet адаптер:=%
    echo .
    echo INSTALL SETINGS
    netsh interface ip set address "%nname%" static %IP_% %MASK_% %SOCKS_% 1
    chcp 866 1>nul
    ipconfig

    в этом файле происходит выборка данных настройки адаптера, настройка адаптера и вывод информации подтверждения настройки.  
    Строки  
    set IP_=192.168.0.34
    set MASK_=255.255.255.0
    set SOCKS_=192.168.0.254

    тут вписывается необходимый адрес для текущей машины, каторые и будут вноситься при загрузке нашей ручной динамической айпи системы.
     
    getmac.bat

    Код:
    setlocal
    for /f "tokens=1" %%i in ('getmac /nh') do (set mac=%%i && goto:next)
     
    :next
    echo  %mac% - %COMPUTERNAME% >> \\autoboot\autoconfig\readme.txt
    pause

    Этот файл просто создаёт список с макадресами всех компьютеров в вашей сети.
     
     
    Как будет запускаться система, зависит от вашего воображения. Я использовал метод постоянного вызова при загрузке компьютера.  
    Прописать путь к файлу можно в реестре в виде:
     
    [code]Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    "autoconfig.bat"="\\autoboot\autoconfig\autoconfig.bat"
     

     
    И теперь после загрузки системы, виндовс автоматически настроит сетевой адаптер присваивая ему статический айпи адрес. и не важно как называется ваше сетевое подключение.

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 13:28 14-02-2008
    Sandy Ann

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    evgeni666
    01MDM
    Запустить игру через start вообще не удается. Что делать?!!

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 20:38 14-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sandy Ann
    А где лежит батник? Если в той же папке, что и Game.exe, то измени  

    Код:
     
    @echo off
    for %%a in (q w e r t y u i o p s d f g h j k l z x c v n m) do (
        dir %%a: 1>nul 2>&1
        if %errorlevel%==1 (
            set letter=%%a
            goto Game
        )
    )
    :Game
    subst %letter%: "."
    %letter%:
    start /wait "" game.exe
    subst %letter%: /d
    exit  
     

     
     
    Добавлено:

    Цитата:
    Запустить игру через start вообще не удается. Что делать?!!

     
    В смысле, если даже вручную все проделаешь?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:15 14-02-2008
    Sandy Ann

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ага, просто вбиваю в батник

    Код:
    start game.exe

    и батник заклинивает:  


    Цитата:
    Если в той же папке, что и Game.exe, то измени  

    Вбиваю несколько укороченном виде:

    Код:
    @echo off  
    for %%a in (q w e r t y u i o p s d f g h j k l z x c v n m) do (  
        dir %%a: 1>nul 2>&1  
        if %errorlevel%==1 (  
            set letter=%%a  
            goto Game  
        )  
    )  
    :Game  
    game.exe

    и получаю:

    Я понимаю, что пользователей 98/МЕ счаз невелико, но игры по сис. требованиям в этих системах поддерживаются.

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 21:27 14-02-2008 | Исправлено: Sandy Ann, 21:48 14-02-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, не работает скрипт... не видит в упор settings.txt
    @echo off
     
    rem Читаем настройки из файла settings.txt, который должен располагаться в
    rem том же каталоге, что и bat-файл. Если не удалось распарсить настройки -
    rem выходим с ненулевым кодом возврата.
    call :read_settings %~dp0\settings.txt || exit /b 1
     
    rem Прочитанные настройки:
    echo Build mode  : %BUILDMODE%
    echo Compiler    : %COMPILER%
    echo Architecture: %ARCH%
     
    rem Выход из сценария. Дальше - только функции.
    exit /b 0
     
    rem
    rem Функция для чтения настроек из файла.
    rem Вход:
    rem       %1           - Имя файла с настройками
    :read_settings
     
    set SETTINGSFILE=%1
     
    rem Проверка существования файла
    if not exist %SETTINGSFILE% (
        echo FAIL: Файл с настройками отсутствует
        exit /b 1
    )
     
    rem Обработка файла c настройками
    rem Здесь:
    rem     eol=# указывает на то, что содержимое строки начиная с символа #
    rem     и до ее конца может быть пропущено как комментарий.
    rem
    rem     delims== указывает, что разделителем значений является символ =
    rem  
    rem     tokens=1,2 приводит к тому, что в переменную %%i будет занесен первый
    rem     токен, а в %%j - второй.
    rem  
     
    for /f "eol=# delims== tokens=1,2" %%i in (%SETTINGSFILE%) do (
        rem В переменной i - ключ
        rem В переменной j - значение
        rem Мы транслируем это в переменные окружения
        set %%i=%%j
    )
     
    exit /b 0
     
    Спасибо, большое за оказываемую помощь!

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 23:28 14-02-2008
    01MDM



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

    Цитата:
    Вбиваю несколько укороченном виде:  

    Еще бы он работал..
     
     
    Добавлено:
    @batniki
     

    Цитата:
    rem Читаем настройки из файла settings.txt, который должен располагаться в
    rem том же каталоге, что и bat-файл.

     

    Код:
     
    @echo off
    if not exist settings.txt (
        echo FAIL: Файл с настройками отсутствует
        goto:eof
    ) else (
        call:read_settings
    )
    ::echo Build mode  : %BUILDMODE%
    ::echo Compiler    : %COMPILER%
    ::echo Architecture: %ARCH%

    echo result
    goto:eof
     
    :read_settings
    ::for /f "eol=# delims== tokens=1,2" %%i in (settings.txt) do (set %%i=%%j)
    echo in read_settings
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:40 15-02-2008
    MammothDEL

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

    Всего записей: 272 | Зарегистр. 22-11-2005 | Отправлено: 04:03 15-02-2008
    Sandy Ann

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

    Цитата:
    Еще бы он работал..  

    Сорри, попутал слегка. start /wait "" game.exe так и не пашет, посему забил в последний код вместо game.exe

    Код:
    for %%a in (q w e r t y u i o p s d f g h j k l z x c v n m) do (  
        dir %%a: 1>nul 2>&1  
        if %errorlevel%==1 (  
            set letter=%%a  
            goto Game  
        )  
    )  
    :Game  
    subst %letter%: "."  
    %letter%:  
    game.exe  
    subst %letter%: /d  
    exit

    И получил:

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 07:01 15-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sandy Ann
    Понятно, попробуй по-другому. Без 98 или Me проверяю только на XP.

    Код:
     
    @echo off
    for %%a in (q w e r t y u i o p s d f g h j k l z x c v n m) do (  
        if not exist %%a:\nul (
            set letter=%%a
            goto Game
        )  
    )  
    :Game  
    subst %letter%: "."  
    %letter%:  
    game.exe  
    subst %letter%: /d  
    exit
     

    И справку по start покажи
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:08 15-02-2008 | Исправлено: 01MDM, 09:11 15-02-2008
    Takuja

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает как мсенить имя компьютера из командной строки?

    Всего записей: 64 | Зарегистр. 11-02-2008 | Отправлено: 13:09 15-02-2008
    Sandy Ann

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM
    А у меня почему через зад идет даже на ХР?
       Во-первых: по команде
    Код:
    if not exist %%a:\nul
    на ХР идет попытка создать субдиректорию на пустом CD ROM-е . Сетевые и пустые буквы диска пропускаются. ME ругается на синтактическую ошибку.
       Во-вторых: в ХР при попытке навязать переменной letter содержимое переменной %%a(она допустим w), на выходе в команде subst %letter%: "."  получаем
    Код:
    subst wпробел!!: "."
    . МЕ вообще не воспринимает %%a, только %a. Но из-за ошибки в if not exist %%a:\nul дальше сказать не могу.

    Цитата:
    И справку по start покажи


    Счаз попробую вместо МЕ поставить 98-й.

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 21:07 15-02-2008
    01MDM



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

    Цитата:
    subst wпробел!!: "."

    Значит не правильно скопировал, посмотри в шапке в пункте "Важно:"
     

    Цитата:
    на ХР идет попытка создать субдиректорию на пустом CD ROM-е

    На пустой болванке или в пустом cd-приводе? Вытащи болванку.

    Цитата:
    Сетевые и пустые буквы диска пропускаются.

    subst только для локальной файловой системы. Что значит пустые буквы диска?  

    Цитата:
    МЕ вообще не воспринимает %%a, только %a.

    %a - если только ты пытаешься запустить команду вручную. Как ты вообще запускаешь скрипт?
     
    Скопируй без концевых пробелов, сохрани с расширением .bat (например mount.bat) и запускай.
     
    ??
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:44 15-02-2008
    yurkesha



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

    Цитата:
    subst wпробел!!: "."
    - обрати внимание в шапку - там как раз на этот случай расписано:

    Цитата:
    Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!

     
    Добавлено: - подзадержался я с ответом - сорри...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 21:46 15-02-2008 | Исправлено: yurkesha, 21:48 15-02-2008
    Sandy Ann

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

    Цитата:
    Значит не правильно скопировал
    Ага, лопухнулся. Счаз без пробела
    Цитата:
    На пустой болванке или в пустом cd-приводе?
    На пустом физическом\виртуальном приводе где L -физический CD-ROM привод. Без диска.

    Цитата:
    Что значит пустые буквы диска?
    Отсутствующие в системе. Слегка некорректно выразился.

    Цитата:
    Как ты вообще запускаешь скрипт? Скопируй без концевых пробелов, сохрани с расширением .bat и запускай.
    Так и делаю.Это пока в ХР. 98-й отказывается:

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 23:27 15-02-2008 | Исправлено: Sandy Ann, 00:20 16-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sandy Ann
    В общем кажется разобрался. Попробуй, батник должен быть в папке с game.exe.

    Код:
     
    @echo off
    for %%a in (e q w r t y u i o p s d f g h j k l z x c v n m) do (  
        subst %%a: "."
        if exist %%a:\%0.bat call :Game %%a
    )
    :Game
    %1:
    start /wait game.exe
    subst %1: /d
    exit
     

     
    Чтоб не было мусора можешь заменить строчку (не знаю будет или нет работать на 98/Me)
    subst %%a: "."
    на
    subst %%a: "." 2>nul

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 01:25 16-02-2008 | Исправлено: 01MDM, 01:36 16-02-2008
    Sandy Ann

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

    Цитата:
    Попробуй, батник

    Он создает субдиректории для всех отсутствующих в системе букв диска.
    Короче я кажись понял суть. Ни 98-й, ни МЕ не понимают код, в котором присутствуют круглые скобки. В ХР на ура пашет это:

    Код:
    for %%a in (d e f g h i j k d e f g h i j k l m n o p q r s t u v w x y z) do (
    subst %%a: .
    if exist %%a:\GameLink.link (
    set cd=%%a
    goto Game
        )
    )
     
    :Game
    Game.exe
    subst %cd%: /d
    exit

    Приходится прописывать еще одну переменную %cd%, ибо при переходе к :Game переменная %%a теряется.

    Всего записей: 38 | Зарегистр. 05-02-2008 | Отправлено: 15:24 16-02-2008 | Исправлено: Sandy Ann, 15:28 16-02-2008
    Brutal



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А не подскажите ли уважаемые, как из батника узнать свой внешний IP и поместить в файлик или переменную?
     
    Имею ADSL с динамическим внешним IP и хочу слать себе смс в случае смены IP. Со всем остальным разобрался, а с этим нет...

    Всего записей: 13 | Зарегистр. 27-04-2006 | Отправлено: 15:34 16-02-2008
    01MDM



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

    Цитата:
    Он создает субдиректории для всех отсутствующих в системе букв диска.

     
    У меня на XP отрабатывает без ошибок. Создается только на первой свободной букве и запускает программу. На 98 по идее тоже должен работать, но без тестирования утверждать этого не буду. Единственно что можно еще заменить, это в строке:
    subst %%a: "."
    на
    subst %%a: "%cd%"
     
    Последний вариант

    Код:
     
    @echo off
    for %%a in (e c f g d i q w r t y u o p s h j k l z x v n m) do (  
        subst %%a: "%cd%"
        set letter=%%a
        if exist %%a:\%0.bat goto game
     
    )
    :game
    %letter%:
    start /wait game.exe
    subst %letter%: /d
    exit
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:57 16-02-2008 | Исправлено: 01MDM, 17:23 16-02-2008
    Lutvun



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

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 21:49 16-02-2008
    getname

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Помогите, нужен батник который бы выводил на экран количество дней до 20.01.2008, если день наступил сообщить об этом...
     
    мой _бредовый_ вариант

    Код:
    @echo off
     
    goto beg
     
    if
    echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
    echo WSHShell.Popup("осталось:"str); >> %temp%\mes.js
    start %temp%\mes.js
    deltree /y %temp%\mes.js
    goto end
     
    :tod
    echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
    echo WSHShell.Popup("сегодня"); >> %temp%\mes.js
    start %temp%\mes.js
    deltree /y %temp%\mes.js
    goto end
     
     
    :beg
    rem в str записать разницу
    var str
    str="20.02.2008" - "%DATE%"
     
    if str==0 then goto dif else goto tod
    :end

     
    заранее благодарен....

    Всего записей: 9 | Зарегистр. 16-02-2008 | Отправлено: 22:39 16-02-2008
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru