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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    nemand



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, подскажите пожалуйста!
    Задача:
    Есть фотографии на компе одного чела, у меня есть сменный носитель, который я могу подсоеденить к этому компу, но не могу явно запустить поиск файлов (где лежат фотки я не знаю и чел это сделать не позволит). Хотелось бы запустив bat-файл инициировать процесс поиска и копирования всех jpg-файлов на мой носитель, при этом не выводя на экран никакой инфы об этом.
    Кому не трудно, напишите bat-ник.
    Спасибо

    Всего записей: 45 | Зарегистр. 10-07-2006 | Отправлено: 22:25 09-01-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите - в составе виндов нет какой-нибудь тулзы чтоб посчитать md5 или crc или какой-то ещё хэш (от файлика в несколько строк)?
    Хотелось бы избавиться от включения внешней тулзы в одном месте.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 06:36 10-01-2010 | Исправлено: wolf0425, 06:42 10-01-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nemand
    Цитата:
    но не могу явно запустить поиск файлов (где лежат фотки я не знаю и чел это сделать не позволит). Хотелось бы запустив bat-файл  
    а юзер то даст тебе запускать батфайл с флешки? И его ну совсем не насторожит, что после запуска батника - чего-то комп винчестером так зажужжал?
     
    как-то так:

    Код:
    cmdow.exe @ /hid
    for %%a in ( c d e f g h i j k l m n o p q r s t u v w x y z ) do if not %%a: equ %~d0 xcopy /c /s %%a:\*.jpg %~d0\files\%%a\
    скопирует со всех дисков на диск с батником в \files\*\
    cmdow - это чтоб окошко батника спряталось, см. в шапке темы.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 09:41 10-01-2010 | Исправлено: wolf0425, 13:54 10-01-2010
    Pacho



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

    Код:
    set type=типФайла
    1>all_key.txt assoc
    for /f "delims==" %%i in ('findstr /b /i /r ".*=%type%" all_key.txt') do assoc %%i=

    А как написать этот скрипт без выгрузки в промежуточный файл (all_key.txt)?

    ----------
    Нет судьбы, кроме той, которую мы выбираем.

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 13:37 10-01-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pacho,
    Если правильно понял. На примере ".zip=CompressedFolder". Т.е. по типу надо найти соответствующее расширение и разбить ассоциацию.

    Код:
     
    @echo off
    setlocal
     
    set "type=CompressedFolder"
    for /f "tokens=1,2 delims==" %%i in ('assoc ^| findstr /e "=%type%"') do assoc %%i=
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:52 10-01-2010 | Исправлено: 01MDM, 13:54 10-01-2010
    wolf0425



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

    Цитата:
    А как написать этот скрипт без выгрузки в промежуточный файл (all_key.txt)?
    наверно так:
    Код:
    set type=типФайла
    for /f "delims==" %%i in ('assoc ^| findstr /b /i /r ".*=%type%"') do assoc %%i=  

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:53 10-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    findstr мы не можем использовать с параметром /e, т.к. тип файла чаще пишется сразу за знаком равенства:

    Код:
    .AAC=Winamp.File.AAC
    .doc=Word.Document.8
     

    В данном случае мы будем искать winamp и word.
     
     
    wolf0425
    Угу, примерно так. Спасибо!

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 15:10 10-01-2010 | Исправлено: Pacho, 15:12 10-01-2010
    01MDM



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

    Цитата:
    findstr мы не можем использовать с параметром /e, т.к. тип файла чаще пишется сразу за знаком равенства

    Не понял ход твоей мысли. Ты же заранее предопределяешь в переменную %type% название ассоциации. Следовательно выражение:

    Код:
     
    "=%type%"
     

    будет соответствовать тому что ты ищещь (поиск с конца строки).  
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:44 10-01-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в бескрайних просторах инета можно наткнутся и на такое  :
     
    сапер (winmine) на батниках
     
       
     
    код - http://habrahabr.ru/blogs/crazydev/75649/
     
    Свои судоку на своих батниках  
     
     
       
     
    код - http://habrahabr.ru/blogs/crazydev/78027/

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:56 10-01-2010 | Исправлено: mugil_cephalus, 20:01 10-01-2010
    sarti



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, уважаемые.
     
    Посоветуйте, что мне сделать, чтобы копировать в одну сетевую шару файлы, проименованные в формате %basename%_backup_%datetime%.bak? Причём копировать не все, а только те, что созданы в первый день каждого месяца.
     
    Т.е. вкратце ситуация: есть множество каталогов (db01, db02, ..., db45, db46, и т.д.), в которые каждую ночь СУБД складывает файлы с непостоянными именами. Вот, к примеру, несколько имён файлов БД db01, созданных 17-го, 18-го и 19-го декабря 2009-го года: \bases\db01\db01_backup_200912170256.bak, \bases\db01\db01_backup_200912180305.bak, \bases\db01\db01_backup_200912190239.bak. Время создания файлов (hhmm), как видно, постоянно меняется. Из сотен файлов (по три с половиной сотни файлов *.bak в каждом из десятков каталогов) мне нужно выловить и скопировать на сетевую шару только те, что содержат в своём имени 20090101..., 20090201..., 20090301..., и т.д. (т.е. бэкапы за первое января, первое февраля, первое марта). Смысл, думаю, понятен.
     
    Возможно, я пытаюсь изобрести велосипед, поэтому, если кто-то знает уже готовый инструмент, удовлетворяющий всем моим потребностям, - подскажите его название, пожалуйста, т.к. самостоятельно нагуглить не смог. Можно в личку, если публично называть п/о возбраняется.
     
     
    Спасибо.

    Всего записей: 1972 | Зарегистр. 04-08-2006 | Отправлено: 09:35 11-01-2010
    wolf0425



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

    Цитата:
    Посоветуйте, что мне сделать, чтобы копировать в одну сетевую шару файлы, проименованные в формате %basename%_backup_%datetime%.bak? Причём копировать не все, а только те, что созданы в первый день каждого месяца.  


    Код:
    for /f "tokens=*" %%a in (' dir /b/s \bases\db??_backup_2009??01*.bak ') do copy /b "%%~a" \kyda\nado\


    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:04 11-01-2010 | Исправлено: wolf0425, 11:10 11-01-2010
    sarti



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, чума... Спасибо большое, всё работает идеально!
     
    И ещё один каприз ньюанс: а можно ли одним (этим же) батником добить всех моих зайцев? Т.е. у меня в каталоге "bases" куча каталогов типа "db01", "db02", и т.д. Как бы мне отразить это в батнике? Чтобы все вложенные в "bases" каталоги парсились батником на автомате? В принципе, могу накопипастить столько батников, сколько у меня каталогов "dbXX", мне не лениво, но перед этим хотелось бы убедиться в отсутствии обходных путей )))
     
    Добавлено:
    Вроде сам разобрался: вставил ".." (\bases\..\), копирование пошло.

    Всего записей: 1972 | Зарегистр. 04-08-2006 | Отправлено: 12:24 11-01-2010
    garri671



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
    Подскажите как выгрузить в файл всех пользователей домена (логин и ФИО), работающих в данный момент. Админские полномочия есть. Заранее благодарен.

    Всего записей: 133 | Зарегистр. 18-07-2007 | Отправлено: 12:58 11-01-2010
    wolf0425



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

    Цитата:
    Т.е. у меня в каталоге "bases" куча каталогов типа "db01", "db02", и т.д. Как бы мне отразить это в батнике?
    а зачем это вообще отображать?
    dir /b/s \bases\db??_backup_2009??01*.bak как раз и выдает список файлов, лежащих во всех подкаталогах \bases\ - так что должно было работать правильно.
    А \bases\..\ - будет искать на только в \bases\* но и в остальных местах \

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:14 11-01-2010
    nemand



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, спасибо большое! Все работает!!
    Вопрос: как сделать так, чтобы поиск шел и в скрытых папках тоже?

    Всего записей: 45 | Зарегистр. 10-07-2006 | Отправлено: 19:51 11-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    К примеру
    Код:
    .AAC=Winamp.File.AAC
    В данном случае
    Код:
    set type=winamp
    т.к. кроме .AAC у нас есть ещё другие расширения, ассоциированные с Winamp. Если будем искать "winamp" с конца, то ничё не найдём.

    ----------
    Нет судьбы, кроме той, которую мы выбираем.

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 22:47 11-01-2010 | Исправлено: Pacho, 22:49 11-01-2010
    wolf0425



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

    Цитата:
    Вопрос: как сделать так, чтобы поиск шел и в скрытых папках тоже?


    Код:
    cmdow.exe @ /hid
    for %%a in ( c d e f g h i j k l m n o p q r s t u v w x y z ) do if not %%a: equ %~d0 xcopy /c /s /h %%a:\*.jpg %~d0\files\%%a\

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 02:30 12-01-2010 | Исправлено: wolf0425, 21:29 12-01-2010
    sarti



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

    Цитата:
    должно было работать правильно.

     
    wolf0425, нет, не сработало, в этом-то всё и дело, поэтому и спросил совета. Пробовал и "\bases\*\", и "\bases\?\", на деле помогло только "\bases\..\". В итоге в батнике полный путь прописан так: "X:\bases\..\db??_backup_2009??01*.bak", парсинг дальше этого диска никуда всё равно не уйдёт, и цикла с бесконтрольным пожиранием системных ресурсов не будет, ведь так? Или ".." всё же чем-то чреват?

    Всего записей: 1972 | Зарегистр. 04-08-2006 | Отправлено: 13:33 12-01-2010
    wolf0425



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

    Цитата:
    Пробовал и "\bases\*\", и "\bases\?\", на деле помогло только "\bases\..\".
    так и не должно работать.
     
    а вот dir /b /s /a-d \bases\db??_backup_2009??01*.bak  
    выводит имена всех нужных .bak, лежащих во всех вложенных подкаталогах \bases\
    проверяй еще раз, не теряя ключик /s
     
    а dir /b/s t:\bases\..\*.bak - выведет и файлы из t:\levizna\  тоже.
     
    пс. если все же не выведет - рассказывай подробности про версию своей нестандартной системы
    ну и на всякий случай  убедись в отсутствии dir.exe dir.com dir.cmd в папках path

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:48 12-01-2010 | Исправлено: wolf0425, 14:07 12-01-2010
    sarti



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, всё, разобрался: ты мне в оригинале дал
    Цитата:
    for /f "tokens=*" %%a in (' dir /b/s \bases\db??_backup_2009??01*.bak ') do copy /b "%%~a" \kyda\nado\

     
    Поставил пробел между /b и /s, и всё заработало. Спасибо тебе ещё раз!

    Всего записей: 1972 | Зарегистр. 04-08-2006 | Отправлено: 14:36 12-01-2010
       

    Страницы: 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 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru