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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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-файлах 6
(часть 1, часть 2, часть 3, часть 4, часть 5)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    romrub

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

    Цитата:
    можно ли запустить бат файл, чтобы в нем при старте был прописан путь "G:\>" и уже введен текст "cl -EHsc .cpp" (текст просто введен но не выполнялся)

     
    видимо имелось ввиду, чтобы при работе текущим каталогом он считал G:\ ?
    тогда командой  
    cd G:\
     
    а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?

    Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 22:31 12-05-2009
    anachrom

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

    Код:
    @echo off
    cd /dG:
    echo cl - EHsc .cpp
     

    Вроде и все

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 22:34 12-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    Ну так как насчет стандартного содержимого?
    Или все уже работает?

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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 22:56 12-05-2009
    sivka krd

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите, как решить следующую задачу.
    Есть компьютер, к нему подключён модем Dlink 2500U с ip-адресом 192.168.1.1. Он регулярно зависает, пинги не ходят, страницы не открываются. Стандартным средством его перезагрузки является http://192.168.1.1/rebootinfo.cgi.
    Требуется сделать скрипт, который будет постоянно пинговать определённый адрес (например, dns-сервер) и, в случае пропадания пинга более чем на 5 запросов, загружать cgi-скрипт.
     
    Заранее спасибо за возможные варианты решения.

    Всего записей: 94 | Зарегистр. 02-04-2007 | Отправлено: 06:13 13-05-2009
    Quosio

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Во-первых спасибо за помощь! Путь к файлу с командой "cd /dG:" работает прекрасно.
     

    Цитата:
    а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?

     
    Да, заготовка для дальнейшего редактирования.
     

    Цитата:
    Вроде и все

     
    Ммм, получается, что текст просто введен сверху в окошке, можно сделать так, чтобы он был в строке ввода?

    Всего записей: 15 | Зарегистр. 16-04-2009 | Отправлено: 09:19 13-05-2009
    romrub

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

    Цитата:
    Цитата:а что значит "введен, но не выполнялся" - в смысле в строке ввода, заготовка для дальнейшего редактирования ?  
     
    Да, заготовка для дальнейшего редактирования.  
     
    Цитата:Вроде и все  
    Ммм, получается, что текст просто введен сверху в окошке, можно сделать так, чтобы он был в строке ввода?

     
    могу ошибаться, но думаю, что средствами bat-файла или cmd.exe этого не сделать.
    может найти какой-нибудь клавиатурный автонабиратель по нажатию горячей клавиши ?
    в DOS-эпоху таких много было ...

    Всего записей: 25 | Зарегистр. 18-03-2009 | Отправлено: 09:51 13-05-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    yurkesha
    У меня там копируется база 1с:
    D:\Trade
    Помимо этой базы есть папка BackUp, куда сваливается все BackUp'ы:
    D:\BackUp
    в которой и находится bat'ник.
    Все заработало (спаибо yurkesha), просто действительно в ListBackUp.txt была ошибка. Вместо D:\Trade было D:\Trade\*, поэтому и случились косяки.
    Строчка копирования у меня сейчас выглядит следующим образом

    Код:
     
    for /f "usebackq tones=*" %%i in ("ListBackUp.tx") do xcopy "%%~i" /s /h /r /f /c /i "%%~nxi" > backup.log
     

    Благодарю всех, кто помогал мне.
    Есть ли еще предложения по оптимизации кода?

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 10:11 13-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    ну я бы еще исключил копирование списка и ручное создание папки %DATE%:

    Код:
    for /f "usebackq tokens=*" %%i in ("ListBackUp.tx") do xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log

     
    Добавлено:
    Ой и еще одно - перед копированием надоть впихнуть проверку на существование целевого пути - вдруг мы случайно повторно запустили скрипт? И в такой ситуации либо отказываться от копирования либо формировать папку с резервным именем...

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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 10:51 13-05-2009 | Исправлено: yurkesha, 23:08 15-05-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    yurkesha
    Вот спасибо за
    Цитата:
    ну я бы еще исключил копирование списка и ручное создание папки %DATE%

    Я над этим тоже думал, но как-то непридумал, начинающий я еще.

    Цитата:
    перед копированием надоть впихнуть проверку на существование целевого пути - вдруг мы случайно повторно запустили скрипт? И в такой ситуации либо отказываться от копирования либо формировать папку с резервным именем...

    Я правильно понял что это то, что предложил Nagual, т.е.:

    Код:
     
    if exist d:\Soft xcopy/y/e/v/c/i/h/r/k/g d:\Soft
     

    только как это написать прменительно:

    Код:
     
    for /f "usebackq tones=*" %%i in ("ListBackUp.tx") do xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log  
     

    вроде:

    Код:
     
    for /f "usebackq tones=*" %%i in ("ListBackUp.tx") do if exist %%~i xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log  
     

    Правильно?

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 11:10 13-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    не совсем так:
    Код:
    for /f "usebackq tokens=*" %%i in ("ListBackUp.tx") do if not exist "%DATE%\%%~nxi" xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi" > backup.log  

    Так как логично проверить существование конечной папки для сохранения. Исходную тоже можно проверять, но даже боюсь представить себе твою реакцию на отсутствие исходной папки
    Предполагается что она всегда есть.

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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 11:25 13-05-2009 | Исправлено: yurkesha, 23:08 15-05-2009
    anachrom

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

    Цитата:
    Так как логично проверить существование конечной папки для сохранения

    Дык она же должна создаться. Чет я запутался.
    вот этим мы построчне бере пути для копирования

    Код:
    for /f "usebackq tones=*" %%i in ("ListBackUp.tx")

    этим мы проверяем папку с именем %DATE% на наличие

    Код:
    if not exist "%DATE%\%%~nxi"

    и если ее не суествует, то создаем и копируем туда по путям.

    Код:
    xcopy "%%~i" /s /h /r /f /c /i "%DATE%\%%~nxi"

    Так?

    Цитата:
    боюсь представить себе твою реакцию на отсутствие исходной папки  

    Это самое страшное, что может присниться.

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 11:52 13-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    да она создается, но!!! - предположим что мы запустили бэкап вторично за день(случайно или расписание сбойнуло или человеческий фактор) - в такой ситуации эта папка уже существует. В принципе можно добиться заведомой уникальности добавив к дате еще и время с точностью до минуты, но как обрезать время в одно действие с заменой символа ":" на что-нибудь допустимое в именах(ну например "_") я на данный момент не соображу, а цепочку присвоений делать как-то некрасиво.
     
    Добавлено:
    Что-то протупил:
    Код:
    %TIME:~0,2%_%TIME:~3,2%


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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 12:13 13-05-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Дык по завершению батника папочка %DATE% удаляется, предворительно запоковавшись в архив. Да согласин, если этот батничек запустить второй раз во время того, как будет исполняться первый или первый собьется по какой либо причине и оставит папки, то будет пипец.
    Я вот думаю, может вначале после переименоваия архивов ввести проверку на наличие папки %DATA%?
     
    Добавлено:

    Цитата:
    %TIME:~0,2%_%TIME:~3,2%  

    Это как?

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 12:36 13-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    %TIME:~0,2%_%TIME:~3,2% даст нам "часы_минуты" (выполни ECHO %TIME:~0,2%_%TIME:~3,2% и увидишь результат).
    Так то что я выше предлагал это оно и есть: if not exist "%DATE%\%%~nxi"
    хотя конечно может действительно проверять "%DATE%" будет логичнее.
     
    Добавлено:
    Quosio
    Действительно чисто средствами bat/cmd файлов такое наверное нереализуемо.
    Но есть такой вариант: Подробнее...
     
    Добавлено:
    Само-собой вместо ECHO "%MY_COMMAND%" можно подставить что-то свое...

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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 12:43 13-05-2009 | Исправлено: yurkesha, 13:47 13-05-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Что это делает я понял. Я просто не совсем понял, почему 0,2 и 3,2.  
    Правильно мыслю, что 0,2 это от 0-ой позиции два числа, 3,2 это от 3-ей позиции два числа. Тогда получается, что от секунды это 6,2. Ну вроде работает.
    Привязка папки по времени не годится, т.к. если бэкап будет большой, то соответственно он может делатся дольше минуты, соостветственно время меняется и коталог на удалении уже будет иметь другое имя от уже существующего (разница в минутах). Соответственно хвосты прочистить будет труднее. Хотя если запускать бэкап на последней минуте этого дня, то опять же возникает таже проблема. Тогда сразу нужно решать проблему.
    Получается следующее.
    Вопрос: Как имя каталога на создание (%DATE%) записать в переменную, чтобы потом, когда удолять его можно было от туда считать?
    Еще вопрос. Как можно отказаться от большого алгоритма переименования архивов с бэкапами?

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 14:09 13-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anachrom
    Понял правильно - подробно это все описано в SET /?
    А насчет времени и даты я не подумал - действительно надо дату и время в нужном формате загнать в переменную окружения и использовать ее при копировании, а то лажа получится - даже просто с датой(в случае перехода через смену дат).
    В этой ситуации руки вообще развязаны и можно заюзать независимый от форматов и локали код
     
    Добавлено:
    Ну и тогда
    Код:
    xcopy "%%~i" /s /h /r /f /c /i "%TEKDATATIME%\%%~nxi"

     
    Добавлено:
    А по поводу переименований - тоже можно избежать...
    Применяем для формирования имени архива префикс %TEKDATATIME%
    и юзаем такой код
     
     
    Добавлено:
    архивация соответственно будет:
    Код:
    7za a -tzip %TEKDATATIME%_BackUp1.zip %TEKDATATIME%


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

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 15:02 13-05-2009 | Исправлено: yurkesha, 15:30 13-05-2009
    Quosio

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

    Цитата:
    могу ошибаться, но думаю, что средствами bat-файла или cmd.exe этого не сделать.  
    может найти какой-нибудь клавиатурный автонабиратель по нажатию горячей клавиши ?  
    в DOS-эпоху таких много было ...

     
    Понятненько. Проблему решил путём написания скрипта в Autoit.

    Всего записей: 15 | Зарегистр. 16-04-2009 | Отправлено: 19:16 13-05-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    yurkesha
    Большое спасибо за помощь. Можно сказать Вы и написали этот батничек совместно с king_stiven. Все превосходно работает.

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 17:59 14-05-2009 | Исправлено: anachrom, 18:06 14-05-2009
    metrim

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В продолжение http://forum.ru-board.com/topic.cgi?forum=62&topic=15343&start=1040#15
    Работает такой вот скриптик:

    Цитата:
    type all_range.txt | findstr /v /g:pre.txt | findstr /v /g:local.txt>download.txt  

    Только вот такая вот проблемка: при большом размере файла local.txt (более 5 метров) сверка просто таки глохнет
     
    Нужно проводить проверку больших файлов. Т.е. из файла  в 1000000 строк нужно отбросить 500000 уже наличествующих файлов (файл local.txt) .
    Может быть будут более продвинутые средства для подобной сверки?

    Всего записей: 110 | Зарегистр. 05-12-2002 | Отправлено: 21:47 14-05-2009
    Alex1985

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    на 90 странице уже спрашивал, но ответа не получил. частично решил сам, а вот дальше никак
     
    есть батник

    Код:
    7z a -mx backup\%NAME%.7z C:\bases\folder1\*
    7z a -mx backup\%NAME%.7z C:\bases\folder2\*

    как другим батником найти в каждой строке folder (имена папок ясное дело разные) и заменить им имя архива %NAME%?
    то есть должно получиться

    Код:
    7z a -mx backup\folder1.7z C:\bases\folder1\*
    7z a -mx backup\folder2.7z C:\bases\folder2\*

     
    в теме было решение как добавить в конец каждой строки определённый текст

    Код:
    for /f "tokens=*" %%a in (1.txt) do echo %%a ^|-^>0>>2.txt  

    а можно ли добавить текст в начало строки?
     
    заранее спасибо за ответы

    Всего записей: 814 | Зарегистр. 07-05-2004 | Отправлено: 22:21 14-05-2009 | Исправлено: Alex1985, 02:03 15-05-2009
       

    Страницы: 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-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru