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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    Elroir



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

    Цитата:
    Вообще, мне показалось, что проблема с выбором утилиты

    Именно так. Мне нужна была утилита, которая:
    1. Умеет работать с UTF-8 кодовой страницей
    2. Умеет проходить по всем под-директоиям
    3. Делает вывод в файл, удобный для парсинга for-ом.
     

    Цитата:
    А рекурсивный проход по файлам - это разве проблема?  

    Нет, не проблема. Только вот вызов утилиты для каждого файла очень не эффективен.
    На директории, в которой около 11 тысяч файлов - утилита checksum, сама проходящая по всему дереву работатет примерно 7 минут, а запуск certutil для каждого из этих файлов - примерно 14 минут.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:42 17-10-2016 | Исправлено: Elroir, 17:15 17-10-2016
    YuS_two



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

    Цитата:
    утилита checksum, сама проходящая по всему дереву работатет примерно 7 минут

    Тут, возможно, не эффективность прохода виновата, а эффективность самого алгоритма подсчета суммы хромает... надо проверять. Только код немного оптимизировать для рекурсии...
    Да, кстати, если не ошибаюсь - утилита платная?А за certutil дополнительно платить не надо.
    Можно ещё md5sum из комплекта GnuWin32 испытать... может быть подойдет под задачу. Но рекурсивных проходов она не делает тоже.

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 22:27 17-10-2016
    404NF

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

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 23:35 17-10-2016
    Elroir



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

    Цитата:
    Да, кстати, если не ошибаюсь - утилита платная?

    Бесплатная, бесплатная. Я давал ссылку выше.
     

    Цитата:
    эффективность самого алгоритма подсчета суммы хромает...  

    Обе утилиты совершенно одинаково работают - проверял на одном большом файле. Время обработки совпадает до милисекунд.
    Просто каждый раз при запуске утилиты, время тратится на создание процесса, резервирование памяти, выделение ресурсов и т.д. Для малого количества файлов разницы почти нет, а вот на сотнях и тысячах заметно.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:01 18-10-2016
    YuS_two



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir  18-10-2016

    Цитата:
    Бесплатная, бесплатная. Я давал ссылку выше.

    Угу, после нескольких удачных запусков на небольшом количестве файлов, она отказалась запускаться. Все запуски были в таком варианте:

    Код:
    @echo off
    set "d_pth=D:\"
    set "d_hash=Test"
    if exist "%d_hash%_time_checksum.txt" del "%d_hash%_time_checksum.txt"
    if exist "filesList.hash" del "filesList.hash"
     
    echo start time check: %time% >>"%d_hash%_time_checksum.txt"
     
    checksum.exe crkq1m(*.*)j(filesList)d(%CD%) "%d_pth%%d_hash%"
     
    echo stop time check: %time% >>"%d_hash%_time_checksum.txt"
    pause

    выкидывает на их сайт, где при малейшей прокрутке страницы выводится ошибка с каким-то предупреждением - даже разбираться не стал, что там написано. Дурость какая-то. Но попадалась информация о приобретении лицензии. Запускалась версия x64
    Далее...

    Цитата:
    Для малого количества файлов разницы почти нет, а вот на сотнях и тысячах заметно.

    Сравнил certutil и md5sum (checksum по причинам описанным выше проверить не удалось). Вот с таким запуском:
    certutil
    и
    md5sum
    - на папке, в которой находились 30942 файла общим размером 79,3 Гб
     
    certutil - 1 час 35 минут
    md5sum - 30 минут
     
    Т.е. принципиальной разницы в способе запуска нет, а вот подсчет у каждой программы проходит по-разному. Поэтому имеет смысл сравнить ещё и checksum.exe, но у меня она работать отказывается, а разбираться с ней лень, слишком много воды в помощи для настройки у неё. Причем при попытке повторений всех действий запуска с "чистого листа" не привели к положительному результату, т.е. программа где-то намусорила в реестре... в общем, лично я не рекомендовал бы использовать такую капризную программу.

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 05:34 18-10-2016 | Исправлено: YuS_two, 05:46 18-10-2016
    chatt

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Огромное спасибо, оба варианта работают как часики (32,W7).
     
    checksum.exe  лезет в интернет обновляться
     
    Вариант с проверкой размера занимает в два раза больше времени, чем первый.
    Если можно, подправьте оба варианта, на  certutil и checksum для того же файла ex1.csv,
    но в котором отсутствует столбец Filesize
     
    Интересно, будут ли оба варианта работать на XP?

    Всего записей: 186 | Зарегистр. 28-05-2016 | Отправлено: 14:41 20-10-2016
    404NF

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hErAux
    Еще один вопрос насчет  
    wmic process Where (CommandLine like 'W:%%' OR CommandLine like '"W:%%') call Terminate
    А можно ли не убивать сразу процесс, а дать сначала команду на завершение приложения (аналогично taskkill), а уже потом подчистить хвосты Terminate?

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 01:40 21-10-2016
    tyt



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть 2 компьютера в домашней сети. К одному из них подключен внешний жесткий диск на который с обеих компьютеров копируются данные(примерно раз в неделю).  
    Можно ли создать батник(и), запустив который все что изменилось в папке  C:\Us копировалось бы на внешний жесткий диск  
    C другого компьютера то же самое, но из папки C:\Arx  
    Помогите пожалуйста

    Всего записей: 2229 | Зарегистр. 21-09-2004 | Отправлено: 19:35 21-10-2016 | Исправлено: tyt, 22:45 21-10-2016
    VitaminP



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tyt
    Я это делаю с помощью консольной утилиты Zerkalo  
    Вот скрипт запуска (кодировка Dos-866):

    Код:
    @echo off
    title  Синхронизация Файлов с HDD_Backup
    set zerkalo=D:\Program\Zerkalo\zerkalo.exe
     
    SET DISK=:
    for %%a in (F G H I J K L M N O P Q R S T U) do if exist "%%a:\HDD_Backup" set DISK=%%a:
    if "%DISK%"==":" echo Устройство не найдено && ping -n 3 localhost > nul && goto eof
     
    %zerkalo% D:\Install %DISK%\Архив\Install -r -o
    %zerkalo% d:\Музыка %DISK%\Музыка -o -r -i
    %zerkalo% D:\Документы %DISK%\Архив\Документы -r -o
    %zerkalo% d:\Клипы %DISK%\Клипы -r -o
     

    В корне внешнего HDD лежит пустой файлик с именем "HDD_Backup" для идентификации этого диска скриптом.

    Всего записей: 306 | Зарегистр. 28-08-2013 | Отправлено: 20:00 21-10-2016 | Исправлено: VitaminP, 20:04 21-10-2016
    tyt



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitaminP
    Спасибо, но обе винды не на русском. Будет ли работать ?

    Всего записей: 2229 | Зарегистр. 21-09-2004 | Отправлено: 20:12 21-10-2016
    VitaminP



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tyt
    Не знаю, попробуй. Если не получится, то есть англоязычный аналог: консольная программа "Mirror". Если не найдёш её в нете, обащайся пришлю.

    Всего записей: 306 | Зарегистр. 28-08-2013 | Отправлено: 20:21 21-10-2016
    chatt

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tyt Мне очень нравится FreeFileSync, с графической оболочкой, работает и на Windows, и на Ubuntu.
    Есть режим зеркала, обновления, синхронизации в обе стороны. http://www.freefilesync.org/download.php

    Всего записей: 186 | Зарегистр. 28-05-2016 | Отправлено: 21:31 21-10-2016
    tyt



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

    Всего записей: 2229 | Зарегистр. 21-09-2004 | Отправлено: 22:07 21-10-2016
    VitaminP



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tyt
    Еще есть синхронизатор "DSynchronize" с графическим интерефейсом.

    Всего записей: 306 | Зарегистр. 28-08-2013 | Отправлено: 22:10 21-10-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    tyt
    Это все, конечно, замечательно. Но так же замечательно с этим справляется
    Цитата:
    robocopy /mir

    Всего записей: 12360 | Зарегистр. 11-03-2002 | Отправлено: 08:56 22-10-2016
    Elroir



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

    Цитата:
    Если можно, подправьте оба варианта, на  certutil и checksum для того же файла ex1.csv,  
    но в котором отсутствует столбец Filesize  

    В коде с checksum, надо просто заменить строчки

    Код:
     
    for /f "tokens=1*" %%A in ('findstr /C:"%%a" %checksumFile% 2^>nul') do (  
            call :renFile "%%B"  
        )  
     

    на

    Код:
     
    for /f "tokens=1* delims=," %%A in ('findstr /C:"%%a" %checksumFile% 2^>nul') do (  
            call :renFile "%%~B"  
        )  
     

     
    А вот код с certutil заточен под нахождение размера - менять его для работы с файлом ex1.csv без поля "Filesize" не имеет смысла.
     

    Цитата:
    Интересно, будут ли оба варианта работать на XP?

    Не знаю - надо пробовать. Утилита certutil не поставлялась с Windows XP Home, так что если используется именно эта версия Windows, то certutil надо туда добавить.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:09 22-10-2016 | Исправлено: Elroir, 22:10 22-10-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте уважаемые форумчане!
     
    Помогите мне пожалуйста вот в этом текст документе
    сделать такое перемещение:
    например:
    Список Wi-Fi адаптеров пригодных для Wardriving'а _ Страница 92 _ Форум АНТИЧАТ- стр 101 п. 2010-п.1834.mht
    Нужно переместить стр 101 п. 2010-п.1834 в начало строки чтобы стало так:
    стр 101 п. 2010-п.1834 Список Wi-Fi адаптеров пригодных для Wardriving'а _ Страница 92 _ Форум АНТИЧАТ-.mht
    Итак нужно сделать с каждой строкой текстового файла.Т.Е с конца строки повырезать только указатель на название нужной темы
    Премногоблагодарен!!!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 21:47 30-10-2016 | Исправлено: Linksach, 21:52 30-10-2016
    YuS_two



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach  31-10-2016

    Цитата:
    так нужно сделать с каждой строкой текстового файла

    Тут не хватает информации:
    1. Кодировка исходного файла?
    2. Конечный пробел в строке, в имени .mht файла, после перестановки части наименования - критичен? Или другими словами: во всех ли строках перед "стр" присутствует пробел?
    3. Там есть строки:

    Код:
    Список Wi-Fi адаптеров пригодных для Wardriving'а _ Страница 110 _ Форум АНТИЧАТ.txt  
    Список Wi-Fi адаптеров пригодных для Wardriving'а _ Страница 69 _ Форум АНТИЧАТ - стр 102 п. 2027-п.1369.mht

    -как должна обрабатываться первая строка?
     
     
    А так, пока примерный код:

    Код:
    sed -r "s/^(.*)\s(стр\b.*)(\..*$)/\2 \1\3/ig" test.txt

    - исходный файл должен быть в кодировке 1251 и перед "стр", обязательно должен присутствовать пробел.

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 12:32 31-10-2016 | Исправлено: YuS_two, 12:41 31-10-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_two
    первая строка никак не должна обрабатываться-она остаётся без изменений
    как лучше сохранить полученный результат через командную строку?
    Я сохранил через>пометить,отправив в буфер результат и затем из буфера вставил в блокнот
    Получилось так
    Как по-другому можно сохранить результат чтоб данные строки были все в одну строку ,а не как здесь
    например:
    стр 102 п. 2027-п.1369 Список Wi-Fi адаптеров пригодных для Wardriving'а _ Стран
    ица 69 _ Форум АНТИЧАТ -.mht
    И конечно хочется чтоб данные страниц были(шли) по-порядку
    101
    102
    103
    А так большое спасибо-код сработал!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 13:31 31-10-2016 | Исправлено: Linksach, 14:33 31-10-2016
    YuS_two



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

    Цитата:
    Как по-другому можно сохранить результат


    Цитата:
    хочется чтоб данные страниц были(шли) по-порядку


    Код:
    @echo off
    >$ sed -r "s/^(.*)\s(стр\b.*)(\..*$)/\2 \1\3/ig" test.txt
    >test_sort.txt gsort -n -k 2 $
    del $
     

    gsort - сортировщик из комплекта GnuWin32

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 17:40 31-10-2016 | Исправлено: YuS_two, 20:18 31-10-2016
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru