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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101 102 103

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FEvER
    Elroir
    В контексте поставленной задачи, какой вопрос - такой ответ. Подразумевалось что файлы не  в счет, как:

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b /a:d') do echo %~ni
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:56 17-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    По моему - задача была поставлена корректно. Ясно же было сказано - название последней папки в пути, а не файла. Но даже так, твой код неправильный - если название с точкой (точками), он выдает только часть до последней точки.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:11 17-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    согласен %~nxi
     
     
    Добавлено:
    Т.е

    Код:
     
    @echo off
    set "cpath=X:\Some\&Folder.Name!"
    for /f "tokens=*" %%i in ("%cpath%") do echo %%~nxi
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:17 17-11-2007
    Omul2



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уже голову сломал, помогите...
    Имеется папка или диск. Закидываем туда батник, запускаем, он должн делать бэкап содержимого папки в которой находиться (копировать через xcopy), по пути c:\bacup\_имя папки где находится батник\_. Если же он лежит в корне диска, то должен копировать файлы по пути  c:\bacup\_метка тома диска где находится батник_\ Если метка тома пуста, имя папки в бэкапе будет стандартное - MyDisk.

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 12:39 18-11-2007
    Maza Faka



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    chcp 1251>nul
     
    echo %~dp0> size.tmp
     
    for %%a in (size.tmp) do set size=%%~za
       
    if %size% equ 5 (
      for /f "tokens=5,7*" %%a in ('vol %~d0') do (
         if "%%a"=="имеет" (
           set volume=%%b %%с) else (set volume=MyDisk)
    )
         xcopy "*.*" "c:\bacup\!volume!\*.*" /i /k /r /y /q
    ) else (
    for /f "delims=" %%a in ('echo %~p0') do xcopy "*.*" "c:\bacup%%a\*.*" /i /k /r /y /e)
     
    del /q size.tmp
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:13 18-11-2007 | Исправлено: Maza Faka, 15:34 18-11-2007
    Omul2



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, уважаемый монстр Maza Faka!
    Почти все работает... Можно пару вопросов?
    Как вычисляется текущая папка, можно поподробнее? интересует переменная %%~za  и кусочек if %size% equ 5 . Как это работает?
    Можно ли скрипт сделать мультиязычным, чтоб корректно работал в английской версии?
    Из метки диска вычисляется только первое слово, например диск будет назван My Disk, папка будет называться My.  
    Заранее благодарю...

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 14:58 18-11-2007
    Maza Faka



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

    Цитата:
    Как вычисляется текущая папка

    echo %~p0 получаем путь к батнику
     

    Цитата:
    интересует переменная %%~za  и кусочек if %size% equ 5

    Из справки:

    Цитата:
    %~zI - Замена %I размером файла


    Цитата:
    Оператор   Описание  
    EQU           равно  

     
     
     

    Цитата:
    Из метки диска вычисляется только первое слово, например диск будет назван My Disk, папка будет называться My.

    Извиняюсь, поторопился, код исправил см. предыдущий пост.
     

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

    Да, конечно, постараюсь сделать.
     

    Цитата:
    уважаемый монстр Maza Faka!

    Да я совсем не страшный

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:36 18-11-2007 | Исправлено: Maza Faka, 15:55 18-11-2007
    Omul2



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Монстрами я называю мегашарящих людей
    Отлично! все работает, спасибо...
    Теперь такая тема.  
    Я типа, хочу сделать мегабэкапер всего на бат файле
    Альернатива Акрониксу в килобайте,
    Единственная проблема - бэкапер должен уметь сжимать файлы. В Window XP нет нормальных архиваторов, придется готовый инкрементный бэкап (или как его там) сначала создавать, потом жать. XP криво жмет, в кабинеты, которые не понимаются другими осями, и zip, который.. ну уже говорилось...
    Идея такова - нести внутри батника заготовку пустого zip файла, (22 байта) создавать его, а потом делать над ним операции с помощью rundll - удалять и добавлять туда файлы . Возможно ли это?  
    Просто мне претят довески к основному коду батника. Хотя...   unZip32.exe можно засунуть внуть батника?
    Сорри, если эта тема и идея обсуждалась, но прочитать 400 страниц форума очень тяжело..

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 16:38 18-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Omul2
    так бы и говорил
    есть robocopy и xxcopy для бэкапа
    а 7z для сжатия
    неужели не устраивают?
    зачем извращаться?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 16:55 18-11-2007
    Omul2



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ссылочки?
     
    Добавлено:
    Ок, посмотрел, дело в том, Nagual, что эти программы СЛОЖНЫ. Для меня программа бэкапа  должна быть простая как отвертка. Просто запустил, и все. В крайнем случае нажал энтер еще. Ну в более крайнем  - настроил под себя.  
    Вот например -  http://minilabmaster.com/2/36_1.shtml
    Сам ее писал и пользуюсь, ничего лишнего. (не сочтите за рекламу)

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 17:05 18-11-2007
    Elroir



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

    Цитата:
    эти программы СЛОЖНЫ

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

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:34 18-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Omul2
    xxcopy
    robocopy
    o robocopy
    robocopy могу выложить отдельно
    7-zip
    что не понятно, спрашивай, постараемся помочь, а такими извратами заниматься можно конечно, но зачем?
     

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 17:42 18-11-2007
    Omul2



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

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

    Полностью с тобой согласен.
    А ВСЕ программы бэкапа меня полностью не устраивают. Они сложны, жирны, и по сути представляют из себя навороченую команду xcopy. Надо вернуться к истокам.  
     
    Добавлено:

    Цитата:
    что не понятно, спрашивай, постараемся помочь, а такими извратами заниматься можно конечно, но зачем?  

    Вообще то ветка называется "Задачи на bat-файлах"
    Вот я  и предложил свою задачу. Да, изврат, согласен, но мне нужно.

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 17:46 18-11-2007 | Исправлено: Omul2, 17:48 18-11-2007
    Elroir



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

    Цитата:
    А ВСЕ программы бэкапа меня полностью не устраивают.

    Видимо я чего-то не понимаю
    Предложенные утилиты обладают возможностями, которых нет у той же xcopy или же для того чтобы получить похожие возможности, надо долго извращаться. В Windows-е нет встроенной возможности использовать zip компрессию из командной строки (это отвечая на вопрос о rundll), соответственно используем сторонние архиваторы - тот же 7zip. То есть по сути, мой главный вопрос - "зачем изобретать велосипед?"
     
    P.S. Это все, конечно, риторика. Каждый решает сам, чем ему удобнее пользоваться.
    Я в этом топике, как-то выкладывал огромные батники, высчитывающие дату файлов месячной давности, которые нужно было удалить. Так то же самое можно было сделать двумя строчками, с помощью сторонней утилиты forfiles.  
     
    Добавлено:
    ОК. Понятно - увидел добавление к твоему последнему посту.

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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Omul2
    абсолютно не прав ты
    возьмём к примеру, папку с важными данными большой вложенности и огромным количеством файлов, в ней часто меняются файлы, необходимо сделать ее бекап, скажем, на другой диск
    можно, конечно выполнить задачу с помощью xcopy
    но, при этом затраты ресурсов системы и времени на выполнение операции будут, мягко говоря, чрезмерно велики
    при этом, если взять простой алгоритм, где сначала удаляется целевая папка, а потом, с помощью xcopy копируется на ее место исходная, то при внезапном отключении системы или каком-либо другом сбое, повторное выполнение операции повлечёт за собой опять те же неимоверные затраты ресурсов и времени, в то время как с помощью сторонних утилит, все делается на порядок быстрей, корректней, а главное, практически, с того места, где прервалось выполение операции
    имхо xcopy годится для мелких задач, но для крупных и важных она, увы, слабовата
    попробуй этот код для бекапа и ощути разницу
    Код:
    xxcopy/backup/pb источник цель
    xxcopy/clone/pb/yy источник цель
    по моему ничего сложного в ситаксисе нет
    да и вес утилиты не такой уж огромный по сравнению с тем полезным действием, которое она выполняет

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемый Nagual, конечно, спорить не буду. Но мне нужна прога для более прозаических целей. Я потерял флэшку. На ней была важная информация, которая постоянно обновляется - web сервер с данными, недаписанные статьи и все такое. Меня ломало делать ее резарвную копию на домашнем компе - копирование там, дурацкие программы, и все такое. Идея такова - кидаем туда батник - backup.cmd, приходим домой, кликаем на него, и вуаля! все файлы копируются на жесткий диск. полтора гига с флэхи копируются за 3 минуты. Это в первый раз. Если несколько файлов обновились - процесс занимает считанные секунды.  Дальше начинаются уже вкусности - запустил батник из папки - делает бэкап папки, запустил с диска - делает бэкап диска. И аккуратненько разлаживает их на жестком в диске по именам, откуда бэкапы делались. А в конце ненавязчиво предлагает - архивировать ли? Ну если б на диск еще писал, вообще бы было хорошо. Весь процесс и интерфейс - нажать 2 раза Enter.  
     
    Добавлено:
    Посмотрел сейчас сколько ресурсов занимает копирование с флэшки с помощью xcopy  - 9-20 процентов. Это много?  
     
    Добавлено:
    И зачем удалять целевую папку? есть же волшебный параметр /D у xcopy?

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 18:27 18-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Omul2
    в том то и дело, что продолжаешь спорить
    раз устраивает, значит все ок, пользуйся
    в твоём случае, чтобы не плодить кучу громоздких батников, можно сделать по-другому
    положить один основной мощный батник в корень флешки (при необходимости туда же приправить утилиты), а остальные батники, более простые, которые только и будут делать, что брать текущий путь и передавать его параметром мощному батнику, лежащему в корне флешки, раскидать по нужным папкам
    для создания образов есть cdimage и mkisofs
    а для записи образов существует консольный dvdburn из того же набора Windows Resource Kits
    проблем не вижу, действуй

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 19:10 18-11-2007 | Исправлено: Nagual, 19:12 18-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Omul2
    Для back-up'а вполне может подойти штатная команда replace . Будет добавлять новые файлы и замещать старые, если они обновились. Набери replace /?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:21 18-11-2007
    Omul2



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

    Цитата:
    Для back-up'а вполне может подойти штатная команда replace . Будет добавлять новые файлы и замещать старые, если они обновились. Набери replace /?  

    Я в курсе.
    Все что мне надо Maza Faka уже написал. Правда с диском еще подглюкивает. Например диск называется Andy Disk, а папку создает  ANDY %с. Насчет zip-ов понял, придется использовать внешний архиватор или кабинеты. За наводку на dvdburn - спасибо.  
    Хотелось обойтись одним файлом, но не получиться, видимо.

    Всего записей: 8 | Зарегистр. 18-11-2007 | Отправлено: 20:44 18-11-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    ну какой же это бэкап? это несерьёзно
    кое-где еще и можно использовать как замену
    а если файл (группа файлов) и каталог(и) будет удалён(а,ы) из целевого каталога и надо воссоздать полную структуру, повторяющую исходный в целевом каталоге?
    приводил здесь как-то код бэкапа чисто системными средствами King Stiven, но он оказался очень медленным и к тому же плохо приспособлен к файлам и путям с "нелюбимыми" символами интерпретатора

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 22:14 18-11-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 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru