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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
     
    Почитай тут http://www.computerra.ru/gid/rtfm/utility/271722/





    Ссылка поправлена. /evle/

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:02 01-01-2007 | Исправлено: evle, 09:25 04-01-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    почитал внимательно, ты тоже неверно понял, то же самое я могу сделать приведенным выше скриптом размером 52 байта
    используя конструкцию:
    скрипт запускает сценарий
    для кругозора пойдет, конечно, но не выход

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:45 01-01-2007
    Elesin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    С праздником всех!
    Не нашёл тут решения такой задачи:
    1. Делаем dir /B
    2. Узнаём имя первого файла в списке и используем его как параметр (переносим в другую папку и скармливаем программе).

    Всего записей: 4 | Зарегистр. 11-12-2006 | Отправлено: 12:51 01-01-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    Я не уверен что понимаю суть задачи (как и многие другие полагаю) - тебе нужно скрывать сам батник, или определённые процессы которые он выполняет?
     
    Средствами одного лишь батника это не достичь, по любому придётся подключать внешнюю артилерию
     
    А пока, вот, RunBat_1.1.zip
     
    Добавил возможность одновременного запуска до 20-ти батников:
     
    для установки дополнительного запуска, необходимо скопировать две секции и добавить число к имени секции ([General Prefs3] и [CmdLine Params3] и т.д.) - см. пример в самом файле конфигурации.
     
    Каждые такие дополнительные секции, используются для запуска одного батника.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:49 01-01-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal
    for /f "usebackq tokens=*" %%I in (`"dir /b"`) do (
    if not defined fname set fname=%%I
    )
    copy "%fname%" c:\temp
    program.exe %fname%
    rem или program.exe "%fname%"
     

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    спасибо за труд и за отклик, но повторю проще сделать то же самое скриптом, не имея в руках ничего, кроме какого-нибудь блокнота
    в приведенном мной выше скрипте достаточно сменить имя запускаего сценария и пускать сценарий скриптом, чем использовать сторонние утилы
    мне нужно не совсем то, что ты понял, не запуск утилитой сценария с параметрами, а запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему, если так будет угодно, это немного разные вещи, я понимаю, что задача отнюдь не из легких, по-прежнему жду идей и оригинальных решений...
    Простейший и наглядный пример работы сценария: написать сценарий и кинуть его в автозагрузку...
    Всех с 2k7!

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 20:44 01-01-2007 | Исправлено: Nagual, 20:48 01-01-2007
    Elroir



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

    Цитата:
    запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему

    Так можно сделать, но потеребуется утилита или скрипт скрывающая окошко запускаемого батника и принимающая название батника в качестве аргумента.
    Приведу пример с утилитой hstart.exe (я ее кинул в Windows фолдер, но можно в любой фолдер в path). Создаем .reg файл со следующим содержанием:

    Код:
     
    Windows Registry Editor Version 5.00
     
    [HKEY_CLASSES_ROOT\cmdfile\shell\open]
     
    [HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
    @="hstart.exe /nowindow \"%1\""

     
    [HKEY_CLASSES_ROOT\cmdfile\shell\open with window]
    "EditFlags"=hex:00,00,00,00
     
    [HKEY_CLASSES_ROOT\cmdfile\shell\open with window\command]
    @="\"%1\" %*"
     

    и импортируем его в реестр.
    Теперь любой .cmd файл, если кликнуть по нему 2 раза, будет запускаться скрытно. Если же надо запустить его нормально, правый клик по нему, выбираем "open with window".

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Спасибо, об этом решении я тоже думал и в курсе.
    У него есть свои недостатки: необходимо использовать реестр и немного геморойно работать с простыми сценариями, не требующими скрытого запуска...
    В принципе, как продолжение этой идеи, можно создать отдельный формат файлов, обозвать его как нить поласковее из 3х букв и прописать в системе, тогда все скрытые сценарии просто переименовать в этот формат и пользоваться их простым запуском без какого-либо гемора и не трогая обычные сценарии, но этот финт ("через *опу") опять же, использует реестр, хотя может кому и подойдет
    В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.
    Спасибо за внимание.

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 22:08 01-01-2007 | Исправлено: Nagual, 22:13 01-01-2007
    ViSiToR



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

    Цитата:
    я по-прежнему продолжаю надеяться, что это сделать возможно.

    Нет, на мой взгляд это сделать невозможно - CMD не был разработан в этих целях, а как раз наоборот, вывести на экран командный процесс. Сам по себе он “не умеет” скрываться, поэтому достичь то что надеешся, одним лишь батником не получится
     
    Можно поинтересоваться, почему нужно именно самим батником скрывать?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:24 01-01-2007
    igor_andreev

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

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

    У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать
     
    А если серьезно, не требуй от батника невозможного. Или учи WSH, на vbscript очень легко писать и никаких окошек скрипты не показывают, если сам не захочешь. Или компилируй батник в экзешник прогами типа ExeScript или Quick Batch File Compiler, они могут делать exe, стартующее в silent mode.
     
    Добавлено:
    ViSiToR
    упс, теперь я не заметил что уже дали ответ (и тоже довольно похожий)

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    для автономности
    с wsh я знаком, но это отдельная тема, там свего гемора полно, и его синт отнюдь не проще синта обычного сценария, попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода
    igor_andreev
    Quick Batch File Compiler пробовал, он непомерно раздувает размер конечного файла и к тому же платен, это не выход, хотя идея установки пароля на сценарии радует
    но всего этого можно достичь обычным раром

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 23:47 01-01-2007 | Исправлено: Nagual, 23:49 01-01-2007
    ViSiToR



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

    Цитата:
    У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать

       
     
    Спасибо, от души посмеялся ...
     
    Nagual
     

    Цитата:
    попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода

    Что значит сколько кода, также и пишется, с подобранной подстановкой кавычек:
     

    Код:
    Set WshShell = WScript.CreateObject("WScript.Shell")  
    WshShell.Run ("""%programfiles%\Program\proga.exe""")

     
    Ну или ExpandEnvStrings


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:14 02-01-2007
    Nagual



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

    Код:
    @echo off
     
    :: Задание переменной имени сайта
    set site=google.com
    set checksite=tracert %site%
    chcp 1251>nul
     
    :check
    title Поиск сайта...
    echo.
    echo   Пауза поиска сайта...
    chcp 866>nul
    ping -n 3 -w 1000 loopback >nul
    echo.
    chcp 1251>nul
    echo   Ищу сайт...
    chcp 866>nul
    %checksite%
    chcp 1251>nul
    if %errorlevel% == 1 (goto :_delay) else (goto :_delaycheck)
     
    ::Задание общей задержки в 120 с (2 мин)
    :_delay
    title Общая задержка...
    echo.
    echo   Пауза общей задержки...
    ping -n 120 -w 1000 loopback >nul
    cls
    goto :check
     
    :_delaycheck
    title Сайт недоступен...
    echo.
    echo   Пауза недоступного сайта...
    ping -n 7 -w 1000 loopback >nul
    cls
    goto :update
     
    :update
    title Обновление IP...
    echo.
    echo   Пауза обновления IP...
    ping -n 10 -w 1000 loopback >nul
    echo.
    echo   Обновляется IP...
    start /w "Запуск утилиты для обновления IP сайта с необходимыми параметрами"
    goto :check

    в коде детально проработана кодировка, так что можно не сохранять его в дос-кодировке
    в коде приведен сайт со статическим IP, на поиск динамического не было времени
    некоторые метки созданы для отладки и наглядности просмотра работы кода

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 07:23 03-01-2007 | Исправлено: Nagual, 07:38 03-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как написать батник такого содержания: Пропинговать компьютеры в локальной сети, если например комп 1 пингуется, то в ini файл, после определённого тэга вписывается строка с указанием ip адреса компа 1, если комп 2 не пингуется, то имеющаяся в ini файле строка с соответствующим ip адресом удаляется и происходит переход к пингу 3-го компа и т.д.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:42 03-01-2007
    Wise_Kaa



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.  
    Как можно с помощью батника посчитать кол-во символов в текстовом файле?
    И еще вопросик, модно ли перенаправлять сообщения команды route в файл?
    route >file.txt работает
    route print >file.txt работает
    а вот route add 192.168.24.1 255.255.255.255 >file.txt  
    не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран

    Всего записей: 59 | Зарегистр. 04-01-2006 | Отправлено: 11:45 03-01-2007 | Исправлено: Wise_Kaa, 11:49 03-01-2007
    Smitis



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

    Цитата:
    а вот route add 192.168.24.1 255.255.255.255 >file.txt  
    не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран

    route add 192.168.24.1 255.255.255.255 >file.txt 2>&1
     
    Добавлено:

    Цитата:
    Как можно с помощью батника посчитать кол-во символов в текстовом файле?

    Взять размер файла
    set l=%~z1

    Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 13:14 03-01-2007
    Desenix

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    route add 192.168.24.1 MASK 255.255.255.255

    Всего записей: 10 | Зарегистр. 20-11-2006 | Отправлено: 13:57 03-01-2007
    Sceval



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот есть батник, подскажите как сделать
     
    net use T: /delete
     
    вот тут спрашивает y/n как автоматически отвечать y

    Всего записей: 134 | Зарегистр. 22-12-2005 | Отправлено: 18:38 03-01-2007
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Sceval
    Вообще-то, не должен спрашивать
    Но в принципе, echo y| net use t: /delete

    Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 20:23 03-01-2007
    Wise_Kaa



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

    Цитата:
    Вот есть батник, подскажите как сделать  
     net use T: /delete  
     вот тут спрашивает y/n как автоматически отвечать y

    можно и так: net use T: /delete /y
     
    Smitis спасибо
    "route add 192.168.24.1 255.255.255.255 >file.txt 2>&1"
    Скажи, а что значат 2>&1? это ведь какие-то условия?
     
    "set l=%~z1" но ведь размер файла не есть кол-во символов. По два байта отводится на переход на новую строку. Кстати, команда почему-то не работае . z1 - это что? и для чего тильда?
    Спасибо.

    Всего записей: 59 | Зарегистр. 04-01-2006 | Отправлено: 00:55 04-01-2007 | Исправлено: Wise_Kaa, 01:05 04-01-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru