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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    AlexanderNON

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

    Цитата:
    Ну, в общем-то, нет:
     
    Код:
    WMIC Path Win32_LocalTime Get DayOfWeek  

     
    А можно код написать, где с помощью этой строки можно удалить все архивы кроме пятничных?

    Всего записей: 22 | Зарегистр. 24-04-2011 | Отправлено: 07:07 25-04-2011
    Bezzz

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

    Цитата:
    Тогда вопрос, как сделать батник, который бы удалял все архивы из папки кроме последнего созданного. Потом копировал бы его в сетевую папку и при удачном копировании удалял архив?

    dir /b /a:-d /o:-d
    первый файл списка будет самый свежий
    Для перемещения используем move

    Всего записей: 1071 | Зарегистр. 14-04-2005 | Отправлено: 07:23 25-04-2011
    res2001



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

    Цитата:
    Ну, в общем-то, нет:  

    В данном случае это не подойдет - надо из даты изменения файла вычислить день недели.
     
    Добавлено:
    AlexanderNON

    Цитата:
    Тогда вопрос, как сделать батник, который бы удалял все архивы из папки кроме последнего созданного. Потом копировал бы его в сетевую папку и при удачном копировании удалял архив?


    Код:
    @echo off
    set "curdir=c:\temp\"
    set "arhdir=c:\temp\arh\"
    ::Переносим последний архив из временной папки в каталог с архивами
    for /f "tokens=*" %%a in ('dir /O:-D /A:-D /B %curdir%') do move /y %%a %arhdir% & goto:next
    :next
    ::Удаляем из временной папки всё
    del /f/q %curdir%*.*
    ::Оставляем в архивном каталоге только 3 последних файла
    for /f "skip=3 tokens=*" %%a in ('dir /O:D /A:-D /B %arhdir%') do del /f/q %%a

    Как-то так будет.  
    Сначала установи переменные curdir и arhdir  в правильные значения.
    curdir - временная папка для хранения архивов за неделю, arhdir - папка для хранения пятничных архивов.
    Тестируй, я не проверял работу.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 08:46 25-04-2011
    wolf0425



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

    Цитата:

    Цитата:
    Тогда вопрос, как сделать батник, который бы удалял все архивы из папки кроме последнего созданного. Потом копировал бы его в сетевую папку и при удачном копировании удалял архив?
    dir /b /a:-d /o:-d
    первый файл списка будет самый свежий
    так все же нужен последний созданный или с с самой последней датой модификации?
    если созданный - то ещё  /t:c  дописать, хотя тут заказчик запросто может путаться  чего ему действительно надо, особенно если тусует логи/бэкапы.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 09:12 25-04-2011 | Исправлено: wolf0425, 09:17 25-04-2011
    res2001



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

    Цитата:
    так все же нужен последний созданный или с с самой последней датой модификации?  

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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:32 25-04-2011
    AlexanderNON

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

    Всего записей: 22 | Зарегистр. 24-04-2011 | Отправлено: 13:23 25-04-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У кого есть возможность, потестируйте консольную утилиту для скачивания файлов из интернет по http и ftp ссылкам
    Скачать | Подробнее...
     
    интересна, прежде всего, работа со всякими ссылками "сложного" вида

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 13:23 25-04-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft
    А чем curl то не устраивает или wget?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:09 25-04-2011
    Free_Soft



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

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 15:15 25-04-2011
    wolf0425



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

    Цитата:
    У кого есть возможность, потестируйте консольную утилиту для скачивания файлов
    Вроде качает.
    Ещё бы умела не файлом скачивать, а в stdout сразу отправлять...
     

    Цитата:
    А чем curl то не устраивает или wget?
    размером?
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:09 25-04-2011 | Исправлено: wolf0425, 16:10 25-04-2011
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скачал rar-архив, в котором 837 файлов. В свойствах архива в винраре указана базовая ОС - Unix (видимо архивировали в юниксе, но разархивировать и потом перекодировать имена файлов нужно в winXP)
    Названия файлов в 16-ричном виде.  
    Попробовал раскодировать, на 2cyr.com пишет, что кодировка utf-16 с постфильтром bin-to-hex.
    Т.е. например в названии файла присутствует D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0, что в кириллице соответствует слову Видеошкола, т.е.  каждый символ кириллицы кодируется четырьмя символами в hex или двумя байтами. Одной утилитой iconv тут не обойтись. Как бы их переименовать, т.к. вручную 837 файлов - многовато?

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 16:16 25-04-2011 | Исправлено: monsoon, 17:47 25-04-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Это единичный случай? Дайте ссылку.

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:27 25-04-2011
    5peciali5t



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

    Цитата:
    просто альтернативный вариант

    на сложных не пробовал особо, простые отрабатывает на раз.
     
    минусы
    - на больших файлах напрягает отсутствие прогресса в %, висит себе консоль и непонятно когда оно там докачается
    - download.exe детектится парой антивирусов, необязательно что он опасен, но многим это не понравится
     
    плюс
    - компактность: 3,5-4 кб это здорово. для простых задач вполне подойдет

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 16:43 25-04-2011
    monsoon



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

    Цитата:
    Это единичный случай? Дайте ссылку

    Все названия файлов закодированы таким образом. Ссылку на архив могу дать, но он 8 гигов   :wink:  
    Несколько названий файлов для примера.
    Задача еще усложняется тем, что подчеркивания, точки и пробелы представлены не в юникоде.

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 16:44 25-04-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    > могу дать
    Ну так давайте. ;) Или он на каком-нибудь (кхм) говнообменнике типа Рапиды?
     
    Добавлено:
    monsoon
    Кстати, UTF-16 тут совершенно не при чем. Это просто шестнадцатеричные коды символов в Юникоде. Разобрать это начисто невозможно, поскольку нет возможности отличить последовательность B0 в значении «а» и B0 в значении «B0», можно только задаться условием, что [A-Z0-9]{2} — это всегда код символа, т.е. например субстроки 88 в значении числа «88» там заведомо нет. Тогда что-нибудь типа
    $ echo -e $(sed 's/[A-Z0-9]\{2\}/\\x&/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # это Баш
    вернет нам
    Видеошкола
     
    Поэтому я и спрашиваю сам архив.

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:52 25-04-2011 | Исправлено: ASE_DAG, 17:35 25-04-2011
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG
    ссылка на лелитбите (на руборде letit могут выпрямить)

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 17:18 25-04-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Не, с Лелитбита я качать все-таки не буду.
    Если учесть, что я выше ошибся, и это все-таки номера байт для UTF-8, то можно задавшись тем, что у нас в именах файлов было только ASCII и кириллица (первый байт в UTF-8: D0 или D1) привести все это безобразие к первоначальному виду довольно однозначно:
     
    $ echo -e $(sed 's/\(D[01]\)\([A-Z0-9]\{2\}\)/\\x\1\\x\2/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # локаль — UTF-8, да
    Видеошкола

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

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:47 25-04-2011 | Исправлено: ASE_DAG, 17:55 25-04-2011
    monsoon



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

    Цитата:
    $ echo -e $(sed 's/\(D[01]\)\([A-Z0-9]\{2\}\)/\\x\1\\x\2/g' <<< D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0) # локаль — UTF-8, да  
    Видеошкола  

    Это для линукса команда?
    в winXP немного изменил:  
    echo D092D0B8D0B4D0B5D0BED188D0BAD0BED0BBD0B0   | sed -e 's/\(D[01]\)\
    ([A-Z0-9]\{2\}\)/\\x\1\\x\2/g'
     
    Пробовал в Far и Far2 (с поддержкой юникод) в обоих результатом выдается:
    \xD0\x92\xD0\xB8\xD0\xB4\xD0\xB5\xD0\xBE\xD1\x88\xD0\xBA\xD0\xBE\xD0\xBB\xD0\xB0
     

    Цитата:
    P.S. Но я бы вам все-таки посоветовал взять другой деархиватор и попробовать это распаковать им.

    Пробовал winrar и 7-zip. Что-то лучшее не знаю.

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 18:19 25-04-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    > Это для линукса команда?
    Это для Баша, я это даже один раз уже писал.
     
    > немного изменил
    Ага, выкинули ключевую команду echo -e, для которой Сед строку и подготавливал.
     
    > в обоих результатом выдается
    Все правильно, именно это то, что вы оставили, и делает.
     
    Добавлено:
    echo из пакета GNU Coreutils, собственно доступен в порте оного под Винду.

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:32 25-04-2011 | Исправлено: ASE_DAG, 18:33 25-04-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    а есть ли способ по возможности без использования сторонних программ консольно выдрать из файла значение Версия файла для его сравнения с другим файлом чтобы вычислить что свежее? (сложнее, но универсальнее в моем случае)
    если по аналогии проще будет выделить даты времени подписания цифровыми подписями чтобы сравнить какой файл позже вышел (возможно проще для сравнения по датам выхода, но не все файлы имеют цифровую подпись)
    и есть ли возможность консольно получать дату появления того или иного файла на сервере разработчика средствами таких программ как wget и т.п.

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 22:53 25-04-2011 | Исправлено: 5peciali5t, 22:55 25-04-2011
       

    Страницы: 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 104 105 106 107 108

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru