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

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



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f %%a in (stolbik.txt) do set "text=!text! %%a"
    echo %text:~1%>>out.txt
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:15 07-02-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Детский вопрос:
    А что, команда start не работает с именами файлов, содержащими пробелы? Кавычки не помогают

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 14:43 07-02-2007
    StanislavG



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
     А не мог бы объяснить что-где что?

    Цитата:
     ECHO wscript.echo date-1>tmp.vbs
    FOR /F %%A IN ('cscript tmp.vbs //Nologo') DO SET "YESTERDAY=%%A"
    ECHO %YESTERDAY%&DEL tmp.vbs


    Всего записей: 34 | Зарегистр. 10-01-2007 | Отправлено: 15:46 07-02-2007
    zubastiy

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день.
    подскажите плз возможно ли силами командных файлов осуществить следующую операцию.
     
    подключаемся к айпишнику с указанным портом, ждем оттуда данные, полученные данные отправляем в текстовый файл.
     
    что то вроде ниже приведенного
     
    telnet ххх.ххх.ххх.ххх 1000
    жди оттуда данных
    когда данные получены > c:\2.txt
    закрываем телнет
     
    спсб %)

    Всего записей: 489 | Зарегистр. 13-10-2005 | Отправлено: 16:10 07-02-2007 | Исправлено: zubastiy, 16:55 07-02-2007
    StanislavG



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    А возможно ли добавить 0 к значению если да то как

    Всего записей: 34 | Зарегистр. 10-01-2007 | Отправлено: 16:45 07-02-2007
    Elroir



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

    Цитата:
    А что, команда start не работает с именами файлов, содержащими пробелы?

    Работатет:

    Код:
    start "" "c:\dir with spaces\file with spaces in the name.exe"

     
    Добавлено:
    StanislavG
    Не понял вопроса - добавить 0 к значению чего?

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:00 07-02-2007
    Maza Faka



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

    Цитата:
    Детский вопрос:  
    А что, команда start не работает с именами файлов, содержащими пробелы? Кавычки не помогают

     
    Команда Start не любит длинные пути. Либо используй сокращения, например:  
    C:\Progra~\MyProg\prog.exe либо запускай при помощи параметра /d например так:

    Код:
    start /d "C:\Program Files\My Program\" program.exe


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:58 07-02-2007 | Исправлено: Maza Faka, 18:59 07-02-2007
    SunnySky

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как я рада что вас нашла!!!!!!!!!!!!
     
    Щас передомной стоит такая задача:  
    в 2 часа ночи запускается процесс, оставляющий после себя подробные логи. По его завершении надо проверить все ли прошло без ошибок, и если вдруг ошибки были перезапустить. Наиболее вероятная причина ошибок - не удалось залить файлы на ftp сервер. Т.е. надо повторить раза 3 с интервалами в 5, 30 минут и скажем час.
     
    Так вот собственно вопрос:
    возможно ли с помощью cmd/bat файлов заставить запустится задачу через 5 минут? или час? причем количество таких запусков должно быть ограничено
     

    Всего записей: 2 | Зарегистр. 07-02-2007 | Отправлено: 19:13 07-02-2007
    KciNKh



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

    Цитата:
    в 2 часа ночи запускается процесс, оставляющий после себя подробные логи. По его завершении надо проверить все ли прошло без ошибок, и если вдруг ошибки были перезапустить. Наиболее вероятная причина ошибок - не удалось залить файлы на ftp сервер. Т.е. надо повторить раза 3 с интервалами в 5, 30 минут и скажем час.  

     
    практически элементарно, создаешь 4 файла, например run200.cmd, run205.cmd, run230.cmd и run300.cmd в первом пишешь (без === ):
    ============
    @echo off
    SET Run_Prog=your_app.exe
    SET log=YourApp.log
    SET FindErr=Error
     
    start /w "%Run_Prog%"
    find /I "%FindErr%" "%log%" >nul
    if ERRORLEVEL 1 goto exit
    at 2:05 "%~dp0run205.cmd"
    :exit
    ============
    с переменными (после SET) должно быть все ясно, если нет, то спрашивай
     
    во втором все тоже самое только время и имя файла следующие другое в строке
    at 2:30 "%~dp0run230.cmd"
    и т.д. сколько раз нужно.
    теперь пишешь в командной строке (в папке с этими файлами)
    at 2:00 run200.cmd
    и всё Enjoy.
     
    * Единственное условие это Windows NT и работающий сервис "Планировщик заданий".
     
    немного коряво но работающее.

    Всего записей: 39 | Зарегистр. 01-01-2007 | Отправлено: 19:40 07-02-2007 | Исправлено: KciNKh, 19:46 07-02-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir,Maza Faka - спасибо
    StanislavG
    Пока igor_andreev нет, я попробую растолковать:

    Код:
    ECHO wscript.echo date-1>tmp.vbs

    записать фразу "wscript.echo date-1" в файл tmp.vbs Фраза эта представляет собой код, для сервера сценариев Windows (Windows Script Host) и выводит дату вчерашнего дня (date - выведет дату сегодня, date+1 - завтра и т.д.)

    Код:
    FOR /F %%A IN ('cscript tmp.vbs //Nologo') DO SET "YESTERDAY=%%A"

    cscript tmp.vbs //Nologo - исполнить файл tmp.vbs консольным вариантом WSH без вывода сведений о нем.
    Целиком вся команда - выводу cscript tmp.vbs //Nologo присвоить имя переменной %yesterday%

    Код:
    ECHO %YESTERDAY%&DEL tmp.vbs

    вывести на экран значение переменной %yesterday% и удалить tmp.vbs

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 01:00 08-02-2007 | Исправлено: Tipulatoid, 01:01 08-02-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    привет всем
     
    помогите пожалуйста разобрать папку в которую постоянно падают файлы 1.zip, 2.zip, 3.zip, ....
    нужно создавать папки с именами такими же как имена архивов и туда класть содержимое того архива, поскольку содержимое одинаковые имена файлов..
     

    Код:
    for /f %%a "delims=. tokens=1" in (c:\a\*.zip) do if ...... set %%a=filename

    или

    Код:
    for /f %%a "delims=. tokens=1" in (c:\a\*.zip) do mkdir c:\a\%%a ... unzip %%a.zip c:\a\%%a
     
     
    заранее благодарен

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 10:50 08-02-2007 | Исправлено: JohnRD, 11:22 08-02-2007
    Jene



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

    Цитата:
    2 часа ночи запускается процесс, оставляющий после себя подробные логи

     
    Очевидно, планировщиком?
     
    Дальнейшие интервалы, зависящие от результатов предыдущих заданий, удобно задавать утилиткой sleepy.exe (не в 2:05, а через пять минут после отработки первого вызова.
     
    Например, на строке
     
    sleepy.exe 20
     
    работа будет продолжена через 20 секунд.

    Всего записей: 19 | Зарегистр. 15-07-2006 | Отправлено: 11:09 08-02-2007 | Исправлено: Jene, 11:10 08-02-2007
    StanislavG



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
      Помоги мне плиз у меня сегодня выдало ошибку

    Цитата:
    set /a prevd=08-1
    Неправильное число. Числовые константы должны быть десятичными (17) шестнадцатеричными (0х11), или восьмеричными (021)

     

    Всего записей: 34 | Зарегистр. 10-01-2007 | Отправлено: 13:19 08-02-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StanislavG
    И завтра выдаст. set /?

    Цитата:
     Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел.  Например, числа 0x12, и 022 обозначают десятичное число 18.  Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 13:35 08-02-2007 | Исправлено: igor_andreev, 13:38 08-02-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    StanislavG
    Ты используешь старый код или исправленный?
    Исправленный работает нормально - только что проверил.  
     
    Добавлено:
    JohnRD

    Код:
     
    @echo off
    for %%a in (c:\a\*.zip) do (
    md c:\a\%%~na 2>nul
    unzip %%a -d c:\a\%%~na  
    )
     

    Проверь ключи unzip-a - у меня, чтобы задать директорию, надо использовать ключ -d.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Вот в этом батнике у меня выдала ошибку

    Цитата:
     rem @echo off
    rem start %time%
    setlocal
    set dt=%date%
    FOR %%I IN (*.*) DO call :finddate "%%I" %dt:~0,2% %dt:~3,2% %dt:~6,4%
     
    rem  cd w:\nbumail\journal
    REM arj32 m w:\nbumail\journal\jour%prevd%%prevm%.dh0  w:\nbumail\journal\ *.old *.rsa *.ind *.key *.pud *.rsa *.lo1 *.er1 *.err *.nbu *.pub *.new *.log
     
    goto :EOF
     
    :finddate
    for /F "usebackq tokens=1,2,3,4 delims=. " %%A IN (`"dir /T:C %1 | find %1"`) DO call :test %%A %%B %%C %1 %2 %3 %4
    goto :EOF
     
    :test
    rem File's date
    set fd=%1
    set fm=%2
    set fy=%3
    rem Current date
    set curd=%5
    set curm=%6
    set cury=%7
    Цитата:
     
    set /a prevd=%curd%-1

    set prevm=%curm%
    set prevy=%cury%
    set prevye=%cury%
    if %curm%==12 (set prevme=11& set days=30)
    if %curm%==11 (set prevme=10& set days=31)
    if %curm%==10 ( set prevme=09& set days=30)
    if %curm%==09 ( set prevme=08& set days=31)
    if %curm%==08 ( set prevme=07& set days=31)
    if %curm%==07 ( set prevme=06& set days=30)
    if %curm%==06 ( set prevme=05& set days=31)
    if %curm%==05 ( set prevme=04& set days=30)
    if %curm%==04 ( set prevme=03& set days=31)
    if %curm%==03 ( set prevme=02& set days=28)
    if %curm%==02 ( set prevme=01& set days=31)
    if %curm%==01 ( set prevme=12& set days=31& set /a prevye=%prevy%-1)
    if %prevd% LEQ 0 (
    set /a prevd=%days%+%prevd%
    set prevm=%prevme%
    set prevy=%prevye%)
    set match=true
    if not "%fd%"=="%prevd%" ( set match=false)
    if not "%fm%"=="%prevm%" ( set match=false)
    if not "%fy%"=="%prevy%" ( set match=false)
    if "%match%"=="true" (  
    copy c:\tcpfoss.452\%4 c:\tcpfoss.452\jnin\
    copy c:\tcpfoss.452\log\%4 c:\tcpfoss.452\jnin\
    move c:\tcpfoss.452\%4 w:\nbumail\journal
    move c:\tcpfoss.452\log\%4 w:\nbumail\journal
    )
     

     
     
    Добавлено:
    Elroir
    ПРошу прощения не заметил ссылку сейчас попробую

    Всего записей: 34 | Зарегистр. 10-01-2007 | Отправлено: 15:42 08-02-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Два вопроса:
     
    1. Возможно ли исключительно средствами виндоус (хотябы XP) скачать файл с сети (http и ftp хотябы)?
     
    2. Возможно  ли исключительно средствами виндоус (хотябы XP) распаковать архив zip, 7z, и rar?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    И ещё, как проверить существование процесса? вроде где то пробегало, но никак немогу найти - желательно тоже коренными средствами.

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

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



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

    Цитата:
    как проверить существование процесса?

    tasklist с параметрами или с find-ом.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:07 08-02-2007
    evle



    1 + int rand(100);
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    Команда Start не любит длинные пути.

    Ну сколько можно уже повторять… Start воспринимает первый параметр в кавычках как заголовок окна. И откуда вообще взялся /d?
    ViSiToR

    Цитата:
    1. Возможно ли исключительно средствами виндоус (хотябы XP) скачать файл с сети (http и ftp хотябы)?  

    C ftp можно через ftp.exe. В этой или предыдущей теме писали пример.  С http в глубокой теории можно попробовать через telnet, но не думаю, что получится.

    Цитата:
    2. Возможно  ли исключительно средствами виндоус (хотябы XP) распаковать архив zip, 7z, и rar?
     

    Насчёт zip не уверен, остальные нельзя, если не учитывать фокусы вроде «Конвертирование файлов (*.com *.exe *.*) в код батника».

    Цитата:
    И ещё, как проверить существование процесса?

    (tasklist | find "cmd.exe") && (что делать, если процесс есть)

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

    Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 06:17 09-02-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