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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    igor_andreev

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

    Цитата:
    скажите как скрипт заставить удалять те файлы которые были отправлены по FTP? вставлял я del уже но толку нету,  

    В метке :inn последней строчкой добавь в скрипт *.ftp удаление, после put

    Код:

    ...
    echo put %2>>"%d%%1.ftp"
    echo ! del %2>>"%d%%1.ftp"

    Восклицательный знак в начале строки фтп-скрипта - это для ftp.exe временный выход в среду cmd.  

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 09:55 07-06-2008
    Diman_tlt



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

    Цитата:
    Или тебе надо все, даже выключенные

     
    будет интересно узнать, как просмотреть выключенные компы в домене, подскажи если есть такая возможность
     
    Еще скажите пожалуйста как выгружать txt с именем файла даты и времени выгрузки,  
    > %date%.txt это понятно, а время?

    Всего записей: 6 | Зарегистр. 06-06-2008 | Отправлено: 09:59 07-06-2008 | Исправлено: Diman_tlt, 11:10 07-06-2008
    JohnRD

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

    Код:
    @Echo Off
    Set cWork=0
    For /l %%a In (1,1,100) Do Call :CompWork 192.168.1.%%a
    If %cWork%==0
    GoTo :EOF
     
    :CompWork
    Echo Ping %1
    Ping -n 1 %1 >> result.txt
    If ErrorLevel 1 (Goto :EOF)
    If ErrorLevel 0 (Set cWork=1)
    GoTo :EOF
     
     
     
    Добавлено:
    igor_andreev
     
    я в трансе - искал в противоположной стороне
     
    спасибо огромное - постоянно выручаете меня.

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 10:11 07-06-2008 | Исправлено: JohnRD, 10:14 07-06-2008
    Diman_tlt



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

    Всего записей: 6 | Зарегистр. 06-06-2008 | Отправлено: 11:08 07-06-2008
    01MDM



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

    Цитата:
    Восклицательный знак в начале строки фтп-скрипта - это для ftp.exe временный выход в среду cmd.

     
    Хм. Красиво. Матчасть.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:25 07-06-2008
    4aplin



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

    Всего записей: 17 | Зарегистр. 29-05-2008 | Отправлено: 12:25 07-06-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    4aplin
    Если разберешься, выложи плз код хотябы в личку, а то я посмотрел на этот eventtrigger, и его смысла не понял. Ну вешает он в планировщике новое задание, но как оно работает для меня осталось загадкой. Вешали и на system error и на warning ничего из этого не получил. Потестил, потестил и забил, пока обхожусь стандартными cmd-шными утилитами и помощью форума.
    KnowledgeBase Event Repository может пригодицца.

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:06 07-06-2008 | Исправлено: Joolz, 13:27 07-06-2008
    JohnRD

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

    Цитата:
    Еще скажите пожалуйста как выгружать txt с именем файла даты и времени выгрузки,  
    > %date%.txt это понятно, а время?

     

    Код:
    @echo off
    set t=%time: =0%
    set s=%t:,=%
    set s1=%s::=%
    set s2=%s1::=%
    set d1=%date:~-4%%date:~3,2%%date:~0,2%
    echo >%d1%_%s2%.txt

     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 18:30 07-06-2008
    HelioSS



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    Спасибо большое за помощь!
    Сделал как написано. Пытается соединиться, но потом вылетает с: "exited with error code 734".
    А вообще обязательно указывать логин и пароль админа, если запуск Internet-соединения происходит из под учётной записи Администратор? А куда же пишутся логин и пароль соединения?

    Всего записей: 5104 | Зарегистр. 26-11-2007 | Отправлено: 01:29 08-06-2008
    Elroir



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

    Цитата:
    А вообще обязательно указывать логин и пароль админа

    Насколько я понял из вопроса - батник запускается из-под учетной записи без администраторских прав, поэтому, чтобы запустить соединение с администраторскими правами, psexec-у требуются логин и пароль администратора.
     

    Цитата:
    А куда же пишутся логин и пароль соединения?

    Это я стормозил

    Код:
     
    psexec -u ЛОГИН_АДМИНА -p ПАРОЛЬ_АДМИНА rasdial "НАЗВАНИЕ ИНТЕРНЕТ СОЕДИНЕНИЯ" username password
     

     
    Добавлено:
    Если же я все-таки понял неправильно и батник запускается из-под учетной записи администратора, тогда вместо этой строчки, надо прописать просто:

    Код:
     
    rasdial "НАЗВАНИЕ ИНТЕРНЕТ СОЕДИНЕНИЯ" username password
     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:05 08-06-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    скажите
    нужно ли создавать условие, если в папке нет искомых файлов чтобы послать  goto :EOF
    или он сам на этом прервется?? как правильнее??

    Код:
    for %%p in (E:\install\GetMail\22\*.xml) do (
         for /f "tokens=2 delims=_" %%i in ("%%p") do

     
    Elroir
    и вот этот вариант только такой:

    Код:
    for %%p in (E:\install\GetMail\22\*.xml,E:\install\GetMail\22\*.rar) do ..  

    что нибуть такого нет??

    Код:
    for %%p in (E:\install\GetMail\22\(*.xml,*.rar)) do ..  

     
    это я так прилизываю, запустил, работает, жду ..
    всем за помощь огромное спасибо
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 09:27 08-06-2008 | Исправлено: JohnRD, 09:29 08-06-2008
    01MDM



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

    Цитата:
    нужно ли создавать условие, если в папке нет искомых файлов чтобы послать  goto :EOF
    или он сам на этом прервется?? как правильнее??  

     
    Если нет *.xml, то и цикл не начнется.
     

    Цитата:
     
    for %%p in (E:\install\GetMail\22\(*.xml,*.rar)) do ..
       
    это я так прилизываю, запустил, работает, жду ..  

    Вообще то не должно работать.
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:05 08-06-2008
    Elroir



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

    Цитата:
    что нибуть такого нет??  
    for %%p in (E:\install\GetMail\22\(*.xml,*.rar)) do ..  

    Нет, так работать не будет.
    Можешь сделать по-другому - перед for-ом переходишь в директорию E:\install\GetMail\22, а затем запускаешь for без указания директории:

    Код:
     
    pushd "E:\install\GetMail\22\"
    for %%p in (*.xml,*.rar) do ..
     



    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 10:54 08-06-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    я имел в виду прилизываю, чтоб красивше было
    работает щас именено так:
    for %%p in (E:\install\GetMail\22\*.xml,E:\install\GetMail\22\*.rar) do ..  
     
    сижу разбираю код.. вы писали что в метку :inn передать переменную можно только с помощью параметров? я так понимаю  do call:inn %%i %%p    это и есть параметры %1 %2
    и синтаксис такой подразумевает что именно метке :inn эти праметры предназначены?
    в другой for они уже не сгодяться?
    я к чему спрашиваю еслиб не было такого временного выхода из ftp в cmd, echo ! del %2>>"%d%_%1.ftp" как бы мы передали эту переменную %p% для удаления переданных файлов?
     
    рабочий код именно такой:

    Код:
    @echo off
     
    set t=%time: =0%
    set s=%t:,=%
    set s1=%s::=%
    set s2=%s1::=%
    set d=scr%s2%
     
    set d1=%date:~-4%%date:~3,2%%date:~0,2%
    set l=E:\install\GetMail\log\%d1%_%s1%.log
     
    for %%p in (E:\install\GetMail\22\*.xml,E:\install\GetMail\22\*.rar) do (
         for /f "tokens=2 delims=_" %%i in ("%%p") do call:inn %%i %%p
    )
    for %%i in (*.ftp) do (
        echo bye>>"%%i"
        ftp -n -s:%%i 192.168.60.30>>%l%
        del "%%i"
    )
     
    E:\install\GetMail\soon.exe 100 E:\install\GetMail\91.cmd
     
    goto:eof
     
    :inn
    for /f "tokens=1,2 delims=; " %%b in (E:\install\GetMail\1.csv) do if %%b==%1 set login=%%c
    set passw=%login%
     
    if not exist "%d%_%1.ftp" (
        echo user>"%d%_%1.ftp"
        echo %login%>>"%d%_%1.ftp"
        echo %passw%>>"%d%_%1.ftp"
    )
    echo put %2>>"%d%_%1.ftp"
    echo ! del %2>>"%d%_%1.ftp"

     
    вот только что в 11:59 дошло полностью как работает этот конвеер - одним словом
    Я не переставаю на Вас удивляться (х/ф Не может быть)
     
    как же быстро он работает, созданы 3 файла с временем до сотых одинаковым, это как??
    scr11510703_710732001D.ftp
    scr11510703_710732001T.ftp
    scr11510703_9123456780.ftp
     
     
    Elroir

    Код:
    pushd "E:\install\GetMail\22\"
    for %%p in (*.xml,*.rar) do ..  

    а выходить нужно?  иначе он файлы создает в папке 22\
     
    где вписать тогда popd ?
     
    и еще я заметил что если запускать этот cmd из под VBS то файлы создаются в %SystemRoot% (если их не удалять), как сказать чтоб в рабочей папке E:\install\GetMail\ создавались...? и обязательно ли писать полные пути?
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 11:16 08-06-2008 | Исправлено: JohnRD, 13:03 08-06-2008
    01MDM



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

    Цитата:
    вы писали что в метку :inn передать переменную можно только с помощью параметров? я так понимаю  do call:inn %%i %%p    это и есть параметры %1 %2
    и синтаксис такой подразумевает что именно метке :inn эти параметры предназначены?
    в другой for они уже не сгодяться?

     
    Если другой for находится в пределах метки. Можно еще объявить переменную явно, но если она объявляется в цикле, то при каждом проходе будет перезаписываться.
     

    Код:
     
    @echo off
    setlocal
    for %%i in (0 1 2 3) do set var=%%i && call:label
    echo %var% last
    goto:eof
     
    :label
    echo %var% in label  
     

     
     
     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:43 08-06-2008
    nNau



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

    Цитата:
    а то делаю так:  
    print /d:\\USER\hp LaserJet 1300 PCL 6 D:\%date%.txt
    пишет: "не удалось инициализировать устройство"  

     
    Во-первых, имя принтера нужно заключить в ковычки, потому как в имени содержатся пробелы:
     
    print /d:"\\USER\hp LaserJet 1300 PCL 6" D:\%date%.txt
     
    Во-вторых, возможно стоит заменить имя машины на IP-адрес
     
    Ну и в-третьих, убедится что имя принтера действительно такое и доступ к нему открыт, проще всего в этом убедится следующим образом: в коммандной строке набрать  
    start \\User (имя лучше заменить на IP)  
    затем, в открывшемся окне, пкм на ярлыке принтера, и в выпадающем меню выбрать "Создать ярлык", поместить ярлык, например, на рабочий стол, и в его свойствах посмотреть поле "объкт", там и будет имя принтера, по которому к нему следует обращаться.

    Всего записей: 83 | Зарегистр. 13-05-2004 | Отправлено: 08:45 09-06-2008
    Diman_tlt



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nNau
    Спасибо за подробный инструктаж, все получилось!

    Всего записей: 6 | Зарегистр. 06-06-2008 | Отправлено: 11:55 09-06-2008
    4aplin



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

    Цитата:
    @echo off
    setlocal
    for /f "tokens=5 delims=:" %%i in ('FINDSTR /I "Status:" log.txt') do set aaa=%%i
    if NOT %aaa%==OPTIMAL (
    sendmail -t < warning.mail
    ECHO WARNING        %date% %TIME:~0,8%>>\\Computer\report$\alertlog.txt
    ) else (
    ECHO OK        %date% %TIME:~0,8%>>\\Computer\report$\alertlog.txt
    )
    pause  

     
     Если процессы в системный лог пишут ошибку, тогда вызов blat(sendmail), весится на команду eventtriggers и отправляет сообщение о том, какой сервис полетел

    Всего записей: 17 | Зарегистр. 29-05-2008 | Отправлено: 10:19 10-06-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    4aplin
    Сначала надо создать событие (eventcreate), по итогам выполнения какой-либо команды.
    Потом на это событие повесить триггер (eventtriggers /create)

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:42 10-06-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    4aplin
    Тебе нужно следить за каким-то конкретным (одним или несколькими) сервисом или вообще за всем?
    IMHO проще смотреть за их статусами через sc query
    Что-то типа этого:

    Код:
    @echo off
    setlocal
    for /f "tokens=4" %%t in ('SC QUERY messenger ^| FINDSTR "STATE"') do SET status=%%t
    if NOT %status%==RUNNING (
    ECHO MIME-Version: 1.0> %TEMP%\temp.mail
    ECHO Content-type: text/plain; charset=windows-1251>> %TEMP%\temp.mail
    ECHO From: SERV1>> %TEMP%\temp.mail
    ECHO To: admin@domain.ru>> %TEMP%\temp.mail
    ECHO Subject: Warning!!! Service down>> %TEMP%\temp.mail
    ECHO.>> %TEMP%\temp.mail
    ECHO. >> %TEMP%\temp.mail
    sendmail -t < %TEMP%\temp.mail
    DEL %TEMP%\temp.mail
    )
     

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:19 10-06-2008 | Исправлено: Joolz, 13:39 10-06-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru