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

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какой ещё батник?! Это просто комстрока, и в ней всё работает, из неё и скопировал.
    Для твоей задачи, как ты её описал, достаточно одной комстроки.
    Конечно, если заменить echo... на ren "%a-%b-%c" "%c-%b-%a"
    А в батнике, ежли чо, нужно писать двойные "%" -- что_угодно /? рулёз

    Всего записей: 3097 | Зарегистр. 18-06-2006 | Отправлено: 07:51 07-08-2008
    19w85



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

    Цитата:
    Какой ещё батник?! Это просто комстрока

    1) Тема называется "Задачи на bat-файлах"
    2) Я просил рабочий батник (или *.cmd - не суть важно) для поставленной задачи
    3) Не поленился и набрал (т.к. вставить нельзя) в командой строке (исходный файл назывался 07,08,08(05-06-51).png):
     

    Код:
    D:\>for /f "tokens=1,2,* delims=-.,(" %a in ('dir /b *.png') do echo %c-%b-%a
     
    D:\>echo 08(05-06-51).png-08-07
    08(05-06-51).png-08-07

     
    А должно было быть
    Код:
    2008.08.07 (05-06-51).png (перед скобкой пробел)

     
     

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 08:51 07-08-2008 | Исправлено: 19w85, 08:53 07-08-2008
    01MDM



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

    Код:
     
    @echo off
    for %%i in (*.png) do call:ren "%%i"
    goto:eof
     
    :ren
    set "n=%~n1"
    ren %1 "%n:,=.%%~x1"
     

     
     
    Добавлено:

    Цитата:
    А должно было быть
    Код:
    2008.08.07 (05-06-51).png (перед скобкой пробел)  

     
    Тогда добавь строчку

    Код:
     
    :ren
    set "n=%~n1"
    set n=%n:(= (%
    ren %1 "%n:,=.%%~x1"  
     

     
     

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    уважаемые знатоки, у меня новый вопрос:
    мой батник выполняет кучу разных задач, и надобно к нему лог прикрутить, например  
    в папке log делать файл log_yyyy_mm_dd.txt в который сохранять весь вывод консоли, и чтобы на каждый день был новый файл, причем батник запускается каждые пол часа...
    возможно что то такое организовать?
    заранее благодарен.
     
    позже: как сделать имя вида log_yyyy_mm_dd.txt я знаю
    попробовал делать вывод в файл так:

    Код:
     
    echo %1>>log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
     

    но вместо того что выводиться в консоль в файле записано лиш
     

    Цитата:
     
    Режим вывода комманд на экран (ECHO) включен
     

    Всего записей: 16 | Зарегистр. 01-04-2008 | Отправлено: 10:52 07-08-2008 | Исправлено: merphy69, 11:06 07-08-2008
    01MDM



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

    Цитата:
    в папке log делать файл log_yyyy_mm_dd.txt в который сохранять весь вывод консоли, и чтобы на каждый день был новый файл, причем батник запускается каждые пол часа...

     

    Код:
     
    your.cmd 1>>log\log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
     

     
    Но если порядок yyyy_mm_dd не принципиален, то проще будет

    Код:
     
    your.cmd 1>>log\log_%date:.=_%.txt
     

     

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, что то не вывыходит....
    в самом начале батника пробовал писать

    Код:
     
    echo 1>>log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
    :: далее действия идут
     

     

    Код:
     
    echo %1>>log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
    :: далее действия идут
     

     

    Код:
     
    start.bat 1>>log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
    :: далее действия идут
     

     

    Код:
     
    start.bat %1>>log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
    :: далее действия идут
     

     
    первые два варианта пишут в файл
    " Режим вывода комманд на экран (ECHO) включен "
     
    последние два  
    " D:\invserv>start.bat  1>>log_2008_08_07.txt "

    Всего записей: 16 | Зарегистр. 01-04-2008 | Отправлено: 11:26 07-08-2008
    mike345S



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Тоже интересует запись в файл _всего_ вывода консоли, как в shell. Возможно ли это?
    А то приходится самому обрабатывать ошибки по коду, но это гимор и не все можно таким путем вывести...

    Всего записей: 550 | Зарегистр. 31-01-2006 | Отправлено: 11:43 07-08-2008
    uZver



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

    Цитата:
    в самом начале батника пробовал писать  

    ээээ, я правильно понял что строку пишешь в сам батник?
    потому как надо сделать start.bat (в нем прописать нужные действия)  
    а потом запускать start.bat >> log.txt
     
    либо каждая команда(требующая лога) в bat-файле должна заканчиваться: >> log.txt

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 12:03 07-08-2008 | Исправлено: uZver, 12:06 07-08-2008
    merphy69

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    uZver
    да, я писал в батник)
    схема start.bat >> log.txt  мне не подходит, тк. у меня запуск по крону и логи сыпятся не туда и дата в имя файла не пишется...
    так что придется дописывать каждую комманду.
    спасибо!!!
     
    Добавлено:
    пытаюсь дописать к каждой команде вывод в файл
     

    Код:
     
    set log=log_%date:~6,4%_%date:~3,2%_%date:~0,2%.txt
    команда >> %log%
     

     
    в итоге создается файл, но в него ничего не попадает...

    Всего записей: 16 | Зарегистр. 01-04-2008 | Отправлено: 12:37 07-08-2008
    VitRom

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, как я понял по писанине 19w85, ему ещё нужно три числа, формирующие дату, выдать в обратном порядке (aa,bb,cc... => cc.bb.aa...)
     
    19w85,  

    Цитата:
    Тема называется "Задачи на bat-файлах"  
    Да, да! Именно "задачи", а не "Скачать рефераты". Кроме того...
    Что ж, с учётом уточнённого диагноза (нужно не просто шпору, а готовый черновик) вот "рабочий батник":
    Результат работы

    Код:
    @rem (С)Ruboad, заказ был такой:
    @rem исходный файл назывался 07,08,08(05-06-51).png
    @rem А должно было быть 2008.08.07 (05-06-51).png (перед скобкой пробел)
    @echo off
    @echo.
    @echo This bat-file renames a subset of *.png files in the current directory
    @echo  files with names like "11,22,33(12-34-56).png" will be renamed and
    @echo filenames wil be translates into "33.22.11 (12-34-56).png" form
    @echo.
    @echo Press Anykey or Ctrl+C to continue & pause >nul
    @rem а теперь одна-единственная строчка:
    for /f "tokens=1,2,3,* delims=-.,(" %%a in ('dir /b "??,*.png"') do ( echo %%a,%%b,%%c(%%d =^> 20%%c.%%b.%%a (%%d & ren "%%a,%%b,%%c(%%d" "20%%c.%%b.%%a (%%d" )
    (всё синее можно выкинуть)
     
    merphy69,
    Цитата:
    echo %1 >>...
    ...(ECHO) включен  
    %1 -- это параметр запуска батника (batnik.cmd param1...), и если его нет, то и получается просто команда "echo", которая честно отрабатывает
     
    Добавлено:
    ЗЫ.
    Цитата:
    запись в файл _всего_ вывода консоли
    Желательно ещё перенаправить stderr в stdout (который и пишется редиректами ">"), вроде как
    Код:
    command >> log 2>&1

    Всего записей: 3097 | Зарегистр. 18-06-2006 | Отправлено: 12:51 07-08-2008 | Исправлено: VitRom, 13:01 07-08-2008
    merphy69

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitRom, спасибо! без "2>&1" выводилось не все!
     
    теперь новый вопрос меня беспокоит, возможно ли делать вывод и в файл и на экран?
     
     
    Добавлено:
    опытным путем установлено, что если поместить содержимое бат файла в скобки и после закрывающейся скобки написать  
    >>log.txt 2>&1  
    то в лог файл выведется все содержимое консоли. важно заметить что внутри скобок не должно быть комментариев начинающихся с "::", их следует заменить на "rem"

    Всего записей: 16 | Зарегистр. 01-04-2008 | Отправлено: 14:08 07-08-2008
    uZver



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

    Цитата:
    возможно ли делать вывод и в файл и на экран?

    имхо нет, если только лог не открыть в каком нить редакторе на чтение. (например в far'е по F3)

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 16:46 07-08-2008
    19w85



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitRom
    2-ой вариант строки - это то, что и требовалось...
    Спасибо.
     
    А можно ли от имен вида
    Код:
    xyz07,08,08(05-06-51).png
    есть возможность перейти к
    Код:
    xyz2008.08.07 (05-06-51).png
    ? (я про этот вариант писал во второй части самого первого сообщения)
     
    P.S. Для VitRom

    Всего записей: 623 | Зарегистр. 20-12-2005 | Отправлено: 17:20 07-08-2008 | Исправлено: 19w85, 00:53 08-08-2008
    Elroir



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

    Цитата:
    возможно ли делать вывод и в файл и на экран?

    Шапка->"Полезные утилиты"->утилита "mtee"

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:56 07-08-2008
    NIKZZZZ



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

    Цитата:
    возможно ли делать вывод и в файл и на экран?  


    Код:
    for /F "usebackq delims=" %%i in (`command`) do echo %%i&echo %%i>>FileLog.txt


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:04 07-08-2008
    Flashkens



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужен следующий батник:
    В файле config.ini нужно изменить строку с "ProxyHost=10.18.0.3" на "ProxyHost=192.168.1.111" написал следющее:
     
    for /f "tokens=*" %%i in (Config.ini) do (if not %%i==ProxyHost^=10.8.0.3 echo %%i>>config2.ini  
    if %%i==ProxyHost^=10.18.0.3 echo ProxyHost=192.168.1.111>>config2.ini)
    del config.ini
    ren config2.ini config.ini
     
    Но батник находит строку, заменяет а потом еще раз пише старый хост типа:
    ProxyType=HTTP(S)                              
    ProxyHost=192.168.1.111  
    ProxyHost=10.18.0.3  
    ProxyPort=3128                              
     
    Возможно мне нужно увеличить счетчик на +1 но как не знаю...

    Всего записей: 3 | Зарегистр. 08-08-2008 | Отправлено: 13:02 08-08-2008
    igor_andreev

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

    Код:

    for /f "tokens=*" %%i in (Config.ini) do (
      echo %%i | find /i "ProxyHost" && echo ProxyHost=192.168.1.111 >>config2.ini || echo %%i >>config2.ini
    )  

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:17 08-08-2008
    Elroir



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

    Код:
     
    for /f "tokens=*" %%i in (Config.ini) do (
    if "%%i"=="ProxyHost=10.18.0.3" (
    echo ProxyHost=192.168.1.111>>config2.ini) else (
    echo %%i>>config2.ini)
    )
    del config.ini
    ren config2.ini config.ini
     

     
    Добавлено:
    igor_andreev

    Не обновил страничку.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:28 08-08-2008 | Исправлено: Elroir, 13:29 08-08-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    А я тоже сначала такой вариант, как у тебя хотел предложить. Потом подумал - если ненароком в config.ini пробел будет после значения, то будет спотыкаться
    "ProxyHost=10.18.0.3 " не равно "ProxyHost=10.18.0.3".  
    Или "ProxyHost = 10.18.0.3" не равно "ProxyHost=10.18.0.3".

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:45 08-08-2008 | Исправлено: igor_andreev, 13:49 08-08-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Или еще быстрее sed config.ini -i -e "s/10.18.0.3/192.168.1.111"

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:46 08-08-2008 | Исправлено: Joolz, 13:51 08-08-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru