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

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



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MihailM Конечно.

    Всего записей: 80 | Зарегистр. 18-09-2017 | Отправлено: 19:32 03-10-2017
    MihailM



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lepar79, а я думал будет что то посложнее .. Спасибо !!
    Просто не знаком с этим делом )
    Ещё раз спасибки !!!
    вопрос закрыт .

    Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 19:34 03-10-2017 | Исправлено: MihailM, 20:19 06-10-2017
    Vladins

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Есть батник для конвертации wav в mp3.
     
    if not exist "%CD%\WAVtoMP3" md "%CD%\WAVtoMP3"
    for %%i in (*.wav) do (
    "C:\Program Files\lame.exe" --cbr --strictly-enforce-ISO --noreplaygain -b 128 -q0 "%%~ni.wav" "%CD%\WAVtoMP3\%%~ni.mp3"
    )
    pause
     
    Хотелось бы, чтобы обработка происходила в 6 потоков одновременно. Я предполагаю что нужно с помощью команды FOR обрабатывать не все файлы в папке, а каждый 6-й, и со сдвижкой на 1,2,3,4,5 файлов для каждого потока. Или создать 6 текстовых файлов со списком нужных файлов (список исходных wav делится на 6 списков)  и под каждый текстовик сделать батник. Возможно ли так или есть другие способы?

    Всего записей: 68 | Зарегистр. 22-05-2010 | Отправлено: 09:24 04-10-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vladins
    Как я понимаю, нужно , чтобы было запущено не более 6 процессов lame.exe, тогда нужно просто сделать очередь, и запускать новый процесс, как только очередной процесс закончил работу.
    Тогда, примерно как-то так

    Код:
    for %%a in (*.wav) do call :_job "%%~na.wav" "%CD%\WAVtoMP3\%%~na.mp3"  
    goto :eof
     
    :_job
    set /a count=0
    for /f %%i in ('tasklist /fi "imagename eq lame.exe"') do set /a count+=1
    if %count% GEQ 6 goto _job
    start "Lame" "C:\Program Files\lame.exe" --cbr --strictly-enforce-ISO --noreplaygain -b 128 -q0 "%~1" "%~2"  
    goto :eof
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:08 04-10-2017 | Исправлено: NIKZZZZ, 20:50 04-10-2017
    Smitis



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

    Цитата:
    Хотелось бы, чтобы обработка происходила в 6 потоков одновременно.

    Многопоточный батник? Это круто
     
    Я бы делал один цикл for для перебора файлов, тело цикла вынес бы из скобок () и вызывал, допустим call :lame "%%~i". В :lame сделал бы циклическую проверку на существование каких-нибудь ключевых файлов в %temp% (lame_thread_1, lame_thread_2 и т.д. до 6) для контроля потоков. Если все шесть файлов существуют, goto назад на начало проверки. Если какой-то освободился (нет файла), создаём lame_thread с нужным номером и запускаем сами себя start "" "%~dp0" /номер "%~1". В начале батника проверка - если первый параметр с номером (/1, /2 и т.д.) запускаем конвертацию файла, переданного как %2. По окончании конвертации удаляем lame_thread с соответствующим номером, освобождая "поток".
     
    Вот как-то так, навскидку.
     
    П.С.
    Предыдущий предложенный вариант с подсчётом уже запущенных lame.exe, пожалуй, удобнее.


    ----------
    Разум когда-нибудь победит

    Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 10:17 04-10-2017 | Исправлено: Smitis, 10:22 04-10-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Vladins
    Но лучше использовать fpMP3Enc

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 10:34 04-10-2017
    Vladins

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Выдает ошибку https://cloud.mail.ru/public/KyAQ/KFkmr3sgZ
    Не проблема если процессов будет более 6. Главное загрузить процессор на 100%
    На данный момент вручную создаю 6 папок, закидываю туда wavы и батник в каждую папку, но надеюсь как то это автоматизировать.
    Pasha_ZZZ
    Вариант с fpMP3Enc интересен, попробую, главное чтоб тот lame был без косяков. Но решение с "многопоточным" батником будет полезно и для других вопросов, например для avisynth скриптов которые работают в один поток.  
     
     

    Всего записей: 68 | Зарегистр. 22-05-2010 | Отправлено: 15:40 04-10-2017
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Vladins
    Use PPX2, Luke!

    Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 16:23 04-10-2017
    Smitis



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

    Цитата:
    Выдает ошибку

    Должно быть не goyo а goto


    ----------
    Разум когда-нибудь победит

    Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 17:04 04-10-2017
    YuS_2



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

    Цитата:
    Выдает ошибку

    Ещё вот эту строку:

    Цитата:

    Код:
    for %%a in (*.wav) do call :_job "%%~ni.wav" "%CD%\WAVtoMP3\%%~ni.mp3"

    - необходимо поправить:

    Код:
    for %%a in (*.wav) do call :_job "%%~na.wav" "%CD%\WAVtoMP3\%%~na.mp3"

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:26 04-10-2017
    metatrop

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

    Цитата:
     
    Но решение с "многопоточным" батником будет полезно и для других вопросов
     

     
    pararun.cmd *.wav ffmpeg -i %1 "%~1.mp3"
     
    pararun.cmd "*.exe *.dll" upx --ultra-brute %1
     
    и т.п.

    Всего записей: 313 | Зарегистр. 17-09-2010 | Отправлено: 18:27 04-10-2017
    NIKZZZZ



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

    Цитата:
    Выдает ошибку

    Я поправил батник, невнимательность ...

    Цитата:
    Не проблема если процессов будет более 6. Главное загрузить процессор на 100%  

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

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:53 04-10-2017
    Vladins

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Все работает, супер, спасибо.
     
    metatrop
    где найти pararun, есть ли описание? расширение cmd или exe?
     
    Еще вопрос:
    как автоматически сохранять в текстовый файл всё содержимое окна cmd? (например в батнике несколько приложений oggenc2, ffmpeg, x264, mkvmerge и другие, каждое пишет свой текст в окне)
     

    Всего записей: 68 | Зарегистр. 22-05-2010 | Отправлено: 23:12 04-10-2017
    MihailM



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lepar79, а как сделать выполнение программы в цикле , через FOR .
    Точнее как правильно прописать ?
    А то что попробовал не получилось....

    Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 23:42 05-10-2017 | Исправлено: MihailM, 00:52 06-10-2017
    Lepar79



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MihailM Вместо "ECHO" из моего кода прописываешь свою программу. ВСЕ!
     
    Что бы локализовать твою проблему, так как я не владею телепатией, поступим проще:
     
    1) ТЫ вручную вытаскиваешь значение одной строки из файла и "подставляешь на выполнение другой программе". Добиваешься работоспособности, пишешь скрипт, и публикуешь его РАБОЧИЙ вариант здесь.
    Повторюсь: для одной строки вытащенной вручную из файла.
     
    2) ТЫ выкладываешь то, что уже сделал, с использованием FOR, с конкретным описанием, что именно не получилось.
     
    Самостоятельно читаешь справку по своей "другой программе", по оператору FOR, и до кучи про команду START. Ну и хотя бы ветку полистай, сомневаюсь, что подобную задачу никто не решал, и не возможно подсмотреть решения.
     
    Ну и напомню про кодировки и лапки.

    Всего записей: 80 | Зарегистр. 18-09-2017 | Отправлено: 13:53 06-10-2017
    MihailM



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lepar79
    Спасибо я вроде бы чуток разобрался. Вместо этого  

    Цитата:
    FILENAME.TXT

    вставить типа (1,1,10 = кол-во)

    Цитата:
     ECHO %%S

    А здесь уже команда.
    Просто я не мог понять еще как 2-3 программы сделать в цикле выполнять х-раз , в чем заключать в какие скобки фигурные или обычные.
    Но вроде разобрался , спасибо !!
    А в реадми по циклу , не очень то много и написано .Тем более когда поверхностно всё знаешь, и разбираешься ...
    А так спасибо , за ответ и помощь !!
     
     

    Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 15:48 06-10-2017 | Исправлено: MihailM, 19:51 06-10-2017
    Lepar79



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

    Всего записей: 80 | Зарегистр. 18-09-2017 | Отправлено: 19:52 06-10-2017
    MihailM



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

    Цитата:
    То тебе нужно из файла строки считывать, то несколько раз программу запускать...  

    Это уже другая задача + интересно стало , что и как )
    С той задачей, я тебя поблагодарил , значит всё ок .. Как говорится вопрос закрыт ...  
    А здесь как бы уже другая задача, по типу как добавка в пред. ответу, точнее на основе пред. ответа всё сделать  ..
    p.s. чуток начал разбираться, ну еще не совсем )

    Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 20:19 06-10-2017 | Исправлено: MihailM, 21:02 06-10-2017
    mouserman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача - ввод с клавиатуры имени файла и текст, который ищем, а на выходе должны вывести искомый текст в строке в отдельный файл. Дошёл до такого кода:  
     
    chcp 65001  
    set /p a = Vvedite imya faila  
    set /p b = Vvedite stroku  
    find /I %a% "%b%">find.txt  
     
    Для поиска брал вот такой файл (a.txt):  
     
    hello  
    boys  
    and  
    girls  
     
    Однако в итоге создается только файл find.txt, а строка туда не добавляется. В чём проблема?

    Всего записей: 2 | Зарегистр. 07-10-2017 | Отправлено: 13:33 07-10-2017
    NIKZZZZ



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

    Код:
    chcp 65001  
    set /p a= Vvedite imya faila  
    set /p b= Vvedite stroku  
    find /I %a% "%b%">find.txt


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:01 07-10-2017
       

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