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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    YuS_2



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

    Цитата:
    посортировать по числам расположенным в столбце,т.е поссортировать по убыванию скорости видеокарт-от большей к меньшей  
    Благодарю! можно код  через sed  


    Код:
    @echo off
    sed -re "s/   *([0-9]+)$/        #\1/" test.txt|gsort -t # -n -k 2 -r
    pause

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 22:48 14-11-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Linksach
    Проще (и надёжнее) всего задача сортировки представленных файлов по числовым значениям решается тупейшим импортом в Excel (или его аналог, например LibreOffice Calc), сортировкой там и экспортом обратно.
    В представленном виде не очень понятно, как выглядят исходные файлы; если цифры, по которым нужно сортировать, выровнены по правому краю, а разделители везде - пробелы, то с сортировкой справится стандартный виндовый sort:
    Код:
    sort /+40 /R <"File to sort.txt" >"Sorted File.txt"  
    "/+40" означает, что sort будет игнорировать первые 40 символов в строке и сортировать по оставшимся.  


    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 23:06 14-11-2016
    YuS_2



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

    Цитата:
    с сортировкой справится стандартный виндовый sort

    Отсортируйте в правильном порядке следующие цифры:

    Код:
    11
    100
    104
    123


    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:15 14-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Извиняюсь, но не сортирует как задумывалось
    Может это код вы  дали сортировки по названию

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 23:22 14-11-2016 | Исправлено: Linksach, 23:23 14-11-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Я, кажется, вполне явно указал, при соблюдении какого условия он справится?..
    Ваш набор (благо, там всего один столбец) можно отсортировать при помощи sort, хотя придётся действовать через ( ! ) и использовать временные файлы. Алгоритм: дополнить ведущими пробелами для выравнивания по правому краю, отсортировать во временный файл, убрать лишние пробелы. Писать код лень, но идею, я думаю, вы и так поняли.

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 23:23 14-11-2016 | Исправлено: BorlandIMHO, 23:25 14-11-2016
    Linksach



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

    Код:
    @echo off  
     sed -re "s/   *([0-9]+)$/        #\1/" test.txt|>test_sort.txt gsort -t # -n -k 2 -r  
     pause


     
     а нельзя в коде убрать чтоб не было символа # перед цифрами
    Благодарю!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 23:32 14-11-2016 | Исправлено: Linksach, 23:41 14-11-2016
    BorlandIMHO

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

    Цитата:
    Ваш набор (благо, там всего один столбец) можно отсортировать при помощи sort, хотя придётся действовать через ( ! )

    numsorter.cmd
    Код:
    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    1>nul 2>&1 copy /y nul "tmpfile1.tmp"
    1>nul 2>&1 copy /y nul "tmpfile2.tmp"
    1>nul 2>&1 copy /y nul "SortedFile.txt"
     
    for /f %%A in ('type "UnsortedFile.txt"') do (
        set "TMPSTRING=                    %%A"
        echo !TMPSTRING:~-20!
    ) 1>>"tmpfile1.tmp"
    sort /R <"tmpfile1.tmp" >"tmpfile2.tmp"
    for /f %%B in ('type "tmpfile2.tmp"') do (
        1>>"SortedFile.txt" echo %%~B
    )
    endlocal
    del /q "tmpfile1.tmp"
    del /q "tmpfile2.tmp"
    (из расчёта, что значащих цифр в числах не более 20)

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 00:15 15-11-2016
    Linksach



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

     

    Код:
    sort /+40 /R <"File to sort.txt" >"Sorted File.txt"

     

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 00:26 15-11-2016 | Исправлено: Linksach, 00:28 15-11-2016
    bomzz

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

    Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 07:02 15-11-2016
    YuS_2



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

    Цитата:
    Я, кажется, вполне явно указал, при соблюдении какого условия он справится?..  

    Может и указали, но сами-то цифры никак выравниваться не хотят, увы...
    Это верно относительно приведенного кода, в том самом сообщении, где было указано условие, то бишь:
     15-11-2016

    Цитата:

    Код:
    sort /+40 /R <"File to sort.txt" >"Sorted File.txt"  

    так что, зря Вы так эмоционально воспринимаете текст...
     
    BorlandIMHO  15-11-2016

    Цитата:
    Ваш набор (благо, там всего один столбец) можно отсортировать при помощи sort, хотя придётся действовать через ( ! ) и использовать временные файлы. Алгоритм: дополнить ведущими пробелами для выравнивания по правому краю, отсортировать во временный файл, убрать лишние пробелы. Писать код лень, но идею, я думаю, вы и так поняли.

    А сценарии batch, очень часто, пишутся через то самое место... и по идее, мне-то идеи зачем, в данном случае? У меня их у самого километр, а лень одолевает не меньше Вашего.
    Но Вы правы, невозможного, в обсуждаемом случае, ничего нет:
     15-11-2016

    Цитата:
    numsorter.cmd

    - можно так, а можно и по-другому, особой разницы нет (при небольшом объеме текста, естественно)... главное, что результат получен.
     
    Linksach  15-11-2016

    Цитата:
    а нельзя в коде убрать чтоб не было символа # перед цифрами

    Можно. Как-то так:

    Код:
    @echo off
    sed -r "s/   *([0-9]+)$/        #\1/" test.txt|gsort -t # -n -k 2 -r -o tmp
    sed -r "s/#([0-9]+)$/ \1/" tmp>test_out.txt
    del tmp
    pause

    или вообще без временных файлов, в одну строку:

    Код:
    @echo off
    sed -r "s/   *([0-9]+)$/        #\1/" test.txt|gsort -t # -n -k 2 -r|sed -r "s/#([0-9]+)$/ \1/" >test_out.txt
    pause


    ----------
    scio me nihil scire

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:41 15-11-2016 | Исправлено: YuS_2, 08:46 15-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    А вот этот тоже убирает # в тексте  
     

    Код:
    @echo off
    SetLocal EnableDelayedExpansion
    for /f "usebackq delims=" %%A in ("test.txt") do set "nresh=%%A" & call :zp "%nresh%"
    exit /b
    :zp
     echo.%nresh:#=%>>test2.txt"
    exit /b

    Просьба,если не правильно что сделал-подкорректировать код
     
     
     
    Добавлено:
    а вот в этом txt-документе http://zalil.su/3467740 записи расположены не правильно  
    Как их привести чтоб были не в строку а в столбик
     
    И как удалить все тире из него используя вышеперечисленные коды через sed для удаления #(где надо подредактировать).Сам пробовал-не получается
    Благодарю за помощь!

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 11:48 15-11-2016 | Исправлено: Linksach, 12:16 15-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    ваши батники "разгребающие помойки" ни один не работает.Мне аж самому интересно почему .Устанавливал переустанавливал 7-zip,думал у меня установленна консольная версия-ан нет-нормальная .Но почему ничего не запускается-загадка  
    Вот первый скриншот непонятный  
    http://hkar.ru/M7pC
    хотя папку SortedGarbage создал по вашей схеме тут d:\F т.е на диске D в папке F
    http://hkar.ru/M7qa

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 18:44 15-11-2016 | Исправлено: Linksach, 19:07 15-11-2016
    BorlandIMHO

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

    Цитата:
    Вот первый скриншот непонятный

    Там русским языком написано, что "папка не существует". Вы создали папку на диске "d:" (что прекрасно видно на 2-м скриншоте), а в батнике значится "y:\d:" (на что и ругается батник на первом)...
     

    Цитата:
    вот в этом txt-документе http://zalil.su/3467740 записи расположены не правильно

    Они там расположены вполне себе правильно. Другой вопрос, что вместо стандартного виндового разделителя строк CR+LF использован юниксовый LF.
    Читать до полного просветления Перевод строки.
    Решение: Convert the line endings in a text file from UNIX to DOS format
    Команда для sed там приведена для *NIX, в имеющемся у меня sed под Win32 работать не хочет, разбираться лень ; посему дам ссылку на пакет конвертеров dos2unix, конвертирующий концы строк между DOS(Win)/Mac/*NIX во всех направлениях. В данном случае из пакета нужна утилита unix2dos.
     

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

    Тупо прогнать через for с разделителем "-":

    Код:
    for /f " tokens=1,2 delims=-" %%A in ('type "File with minus.txt"') do 1>>"File without minus.txt" echo %%A %%B

     
    P.S. Попутно выяснилось, что если таким образом минусы удалять сразу из исходного файла (без использования конвертера), то можно обойтись и без конвертера.

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 23:37 15-11-2016 | Исправлено: BorlandIMHO, 23:57 15-11-2016
    Linksach



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

    Цитата:
    Там русским языком написано, что "папка не существует". Вы создали папку на диске "d:" (что прекрасно видно на 2-м скриншоте), а в батнике значится "y:\d:" (на что и ругается батник на первом)...

    А где я должен был создать папки и что это такой за диск "y:\d:"  
    У вас что такой есть или вы просто прикалываетесь,а я не понял
    К чему это всё  
    а в батнике да ,идёт по-вашему,так:
    set "GARBAGE=x:\путь\Garbage"
    set "SORTEDGARBAGE=y:\путь\SortedGarbage"
    я указал
     
    set "GARBAGE=x:\d:\E\Garbage"
    set "SORTEDGARBAGE=y:\d:\F\SortedGarbage"
     
    Могу поменять маленькую в на большую D и ничего не произойдёт нового

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 00:05 16-11-2016 | Исправлено: Linksach, 00:38 16-11-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нету такого диска и быть не может.
    Но у Вас в батнике написано именно так.
    Вместо "d:\F\SortedGarbage" написано "y:\d:\F\SortedGarbage"...
    Я (для примера) указал диски "x:" и "y:".
    Если у Вас папки на другом диске - так уберите мои пути полностью и впишите свои.

    ----------
    http://www.imho.ws

    Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 00:36 16-11-2016 | Исправлено: BorlandIMHO, 00:39 16-11-2016
    Linksach



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да вы просто запутали меня  
     
    x:\path to
     
    Это как надо понимать
     
    path-путь .Вот и указал я диск где этот путь
    А ИКС я и представления не  имел что-это ,думал так и надо.
    Хочу сразу написать что в батниках я разбираюсь на уровне детского сада ,т.е вообще не разбираюсь потому что не изучал и не изучаю эту науку.Это чтоб вы  знали что от меня можно ожидать
     
    Вы пишите не загадками а указывая номера дисков хотя бы С и D ТОГДА Я ПОЙМУ В ЧЁМ ДЕЛО
     
     
    Добавлено:
    НУ  ТЕПЕРЬ РАБОТАЕТ  
     
                   
     
     

    Всего записей: 113 | Зарегистр. 11-07-2015 | Отправлено: 00:47 16-11-2016 | Исправлено: Linksach, 01:17 16-11-2016
    Ligre

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, кто умеет работать с командной строкой, сделайте толковый скрипт/батник для добавления обложек (png jpg) в файл mkv с помощью mkvtoolnix для ru-board-сообщества.
    Сейчас есть простой скрипт, но он далек от совершенства. Например, если операция закончилась с ошибкой, скрипт об этом не сообщит, нельзя с помощью него удалить изображения из mkv

    Код:
    @echo off  
     
    for %%i in (%*) do (  
    if /I %%~xi==.mkv SET mkvfile=%%~i  
    if /I %%~xi==.jpg SET coverfile=%%~i & SET coverExt=%%~xi  
    if /I %%~xi==.png SET coverfile=%%~i & SET coverExt=%%~xi  
    )  
     
    IF "%mkvfile%"   == "" goto :filemissing  
    IF "%coverfile%" == "" goto :filemissing  
     
    mkvpropedit.exe "%mkvfile%" --attachment-name cover%coverExt% --add-attachment "%coverfile%"  
     
    Echo Cover Added Successfully!  
     
    Pause & goto :eof  
     
    :filemissing  
    Echo One or both files are missing or in a wrong format. & pause & goto :eof

    Сейчас он расположен здесь
    Все началось с программы Icaros Shell Extensions, которая позволяет отображать mkv в проводнике в виде постеров/кадров.
    mkvpropedit.exe позволяет поместить изображения в mkv без создания нового файла.  
    Документация по mkvpropedit.exe

    Всего записей: 993 | Зарегистр. 20-11-2011 | Отправлено: 01:37 16-11-2016 | Исправлено: Ligre, 01:39 16-11-2016
    GiraffeFick

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята
    Мне нужны 2 скрипта:  
    Мне нужно, чтобы первый скрипт в выбранной системе папок искал файлы с одинаковым названием, нужным мне и заменял их на мой файл, не важно, как он будет называться, так же или нет.  
    Второй скрипт нужен мне для пакетной замены иконок, есть у меня, например папка, мне нужно чтобы все файлы в ней стали с одинаковой иконкой  
    Помогите, кто чем может

    Всего записей: 3 | Зарегистр. 16-11-2016 | Отправлено: 03:31 16-11-2016 | Исправлено: GiraffeFick, 23:00 16-11-2016
    Sanatory



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребятушки, выручайте.
    Я с 2009-го года оставлял отзывы о просмотренных фильмах в текстовых файликах. Накопилось их больше тысячи в итоге. Так что решил избавиться от этой кучи, перенеся всё в одну html-ку, к которой прикручу сортировку, поиск и т. д. Но для этого мне надо собрать гору текстовиков в один html-документ.
     
    Но я в написании батников полный нуб, так что прошу помощь зала.
     
    Итак, что надо сделать.
    Есть много текстовых файлов такого типа:  
     
    Бессмертные_Война миров (Immortel (ad vitam), 2004).txt
    Коммуна (The Commune - Kollektivet, 2016).txt
    И гаснет свет... (Lights Out, 2016).txt
    // Двоеточия в названиях я заменял символом подчёркивания, как видите. Знак вопроса - цифрой 7.
     
    Из них надо выудить название фильма, год выхода на экраны, дату создания документа и собственно содержимое.
    На выходе всё это надо разместить внутри тегов таким образом:

    Код:
     
    <tr>
    <td>5</td> // Техническое поле - зарезервировано для выставления личного рейтинга
    <td><a id="number2" href="#modal" rel="modal:open" onclick="DisplayFunction(this.id);return false;">Светская жизнь (Cafе Society)</a><span id="description"></span></td> // Здесь id="number2" - это просто уникальный порядковый номер, можно присвоить в качестве него классическую i из цикла. А между тегами span необходимо разместить содержимое файла.
    <td>2015</td> // год выхода фильма надо вытащить из названия файла
    <td></td> // Ещё одна "техническая колонка"
    <td>Aug 21, 2009</td> // Время СОЗДАНИЯ файла. В любом формате, в принципе, но желательно гггг.мм.дд
    </tr>
     

    Было бы совсем круто ещё и отделить название, с которым фильм шёл в прокате в России, от оригинального. Но это уже как получится.
     
    Буду неимоверно благодарен за помощь.

    Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 17:40 16-11-2016
    Elroir



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

    Код:
     
    @echo off
    setlocal
    pushd "%~dp0"
    chcp 1251 > nul
    set "counter=0"
    echo. >movies.html
    for %%a in (*.txt) do (
        echo Processing file "%%a"
        for /f "tokens=1* delims=(" %%b in ("%%~na") do (
            set "russianName=%%b"
            for /f "tokens=1* delims=," %%d in ("%%c") do (
                set "englishName=%%d"
                set "year=%%e"
                set "creationDate=%%~ta"
            )
        )
        call :write "%%~fa"
    )
    popd
    goto :EOF
     
    :write
    set /a "counter+=1"
    set "russianName=%russianName:~0,-1%"
    set "year=%year:~1,-1%"
    echo ^<tr^> >> movies.html
    echo ^<td^>5^</td^> >> movies.html
    echo ^<td^>^<a id="%counter%" href="#modal" rel="modal:open" onclick="DisplayFunction(this.id);return false;"^>%russianName% %englishName%^</a^>^<span id="description"^> >> movies.html
    more "%~1%" >> movies.html
    echo ^</span^>^</td^> >> movies.html
    echo ^<td^>%year%^</td^> >> movies.html
    echo ^<td^>^</td^> >> movies.html
    echo ^<td^>%creationDate%^</td^> >> movies.html
    echo ^</tr^> >> movies.html
     
     

    Русские и английские названия в разных переменных, так что можно вставить куда угодно.
    Запись идет в файл movies.html.
    Батник запускать из директории с текстовыми файлами.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:18 16-11-2016 | Исправлено: Elroir, 21:23 16-11-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