Пакетный скрипт для поиска, замены и вывода нового файла и суммирования каждый раз

Я редактирую кучу файлов с помощью mkvmerge и делаю это:

Видео из мультиплексора original-001.mkv со звуком из audio-001.mkv и добавлением субтитров из sub-001.mkv.

Я создаю кучу скриптов .bat и использую функцию поиска и замены notapad++ для этого:

найти 001 и заменить на 002, сохранить как 002.bat и двигаться дальше.

По сути, всегда будет базовый файл с именем 001.bat.

Что было бы действительно здорово, если бы эту часть Notepad++ можно было автоматизировать. Найдите все строки «001», замените на «002», сохраните как 002.bat Найдите «002», замените на «003», сохраните как 003.bat.

Up to 300.

И, наконец, что я делаю, это другой скрипт: Звонок 001.bat Звонок 002.bat и так далее. Если файл не существует, нет проблем.

Возможно ли это с помощью пакетного сценария в Windows?

РЕДАКТИРОВАТЬ, чтобы добавить код так, как я сейчас: Пример 001.bat

"C:/Program Files/MKVToolNix\mkvmerge.exe" --ui-language en --output ^"F:\original\original-001 ^(1^).mkv^" --language 0:eng --default-track 0:yes --language 1:eng --default-track 1:yes ^"^(^" ^"F:\original\original-001.mkv^" ^"^)^" --no-video --language 1:por ^"^(^" ^"F:\BR001.mp4^" ^"^)^" --track-order 0:0,0:1,1:1

И у меня есть это (но это powershell)

powershell -Command "(gc 001.bat) -replace '001', '002' | Out-File 002.bat"
powershell -Command "(gc 002.bat) -replace '002', '003' | Out-File 003.bat"
powershell -Command "(gc 003.bat) -replace '003', '004' | Out-File 004.bat"
powershell -Command "(gc 004.bat) -replace '004', '005' | Out-File 005.bat"
powershell -Command "(gc 005.bat) -replace '005', '006' | Out-File 006.bat"
and so on

Наконец, я использую это:

call 001.bat
call 002.bat
call 003.bat
call 004.bat
call 005.bat
call 006.bat
and so on

Но я сделал все это вручную, поэтому автоматический способ был бы потрясающим для всех выходных данных mkvtoolnix, потому что я могу использовать расширенное переименование, чтобы изменить все эпизоды на 001, 002 и т.


person Vitor Oliveira    schedule 14.02.2019    source источник
comment
Пожалуйста, отредактируйте свой вопрос, включив в него минимально воспроизводимый пример кода, который вы хотите, чтобы мы помогли вам исправить, который не работает так, как написано и задумано. В нынешнем виде ваш вопрос в настоящее время не по теме, поскольку это список требований и, как таковой, фактически запрос на бесплатный скрипт.   -  person Compo    schedule 14.02.2019
comment
Без кода ваш вопрос здесь не по теме. В общем, измените свою партию, чтобы включить цикл подсчета for /l от 1001 до 1300, и внутри цикла используйте только последние 3 цифры, чтобы преодолеть проблемные числа с начальными нулями, интерпретируемыми как восьмеричные.   -  person    schedule 14.02.2019
comment
Я полностью понимаю, откуда вы, ребята, но помощь этому парню заняла так мало времени. Без использования пакетных функций через вызов :label %var% пакетная обработка — это головная боль… теперь он знает, как это делается. 8^)   -  person Señor CMasMas    schedule 14.02.2019
comment
@SeñorCMasMas: я сомневаюсь, что ответ на y-часть XY-Problem полезен в долгосрочной перспективе. run, особенно когда есть короткое решение для x-части.   -  person Stephan    schedule 14.02.2019


Ответы (2)


Я сомневаюсь, что создание 300 почти идентичных пакетных файлов - хорошая идея. Используйте только один и перебирайте числа:

@echo off
setlocal 

for /l %%i in (1,1,300) do call :processFile %%i
goto :eof

:processFile
set "number=000%1"
set "number=%number:~-3%"
echo %number%: original-%number%.mkv audio-%number%.mkv sub-%number%.mkv
REM insert your mux command here
person Stephan    schedule 14.02.2019
comment
Я согласен.. Я дал ему именно то, что он просил. Я, наверное, должен был упомянуть об этом. - person Señor CMasMas; 15.02.2019
comment
Стефан, я понятия не имел, что это можно сделать таким образом. Я действительно хотел бы найти возможное универсальное решение для этого. Вот пример с вашим скриптом REM C:/Program Files/MKVToolNix\mkvmerge.exe --ui-language en --output ^F:\original\original-001 ^(1^).mkv^ --language 0:eng --default-track 0:yes --language 1:eng --default-track 1:yes ^^(^ ^F:\original\original-001.mkv^ ^^)^ --no-video --language 1:por ^^(^ ^F:\BR001.mp4^ ^^)^ --порядок дорожек 0:0,0:1,1:1. И по какой-то причине он продолжает зацикливаться на одном и том же файле. Если бы он мог изменить 001 на 002 и так далее, это было бы потрясающе. - person Vitor Oliveira; 15.02.2019
comment
@VitorOliveira как насчет замены каждого 001 на фактическое %number%, как я сделал в строке echo? - person Stephan; 15.02.2019
comment
Оооо, я прочитал ваше сообщение 10 раз, прежде чем я получил его. Вы имеете в виду вот так C:/Program Files/MKVToolNix\mkvmerge.exe --ui-language en --output ^F:\original\original-%number% ^(1^).mkv^ --language 0:eng - -default-track 0:yes --language 1:eng --default-track 1:yes ^^(^ ^F:\original\original-%number%.mkv^ ^^)^ --no-video -- язык 1:por ^^(^ ^F:\BR%number%.mp4^ ^^)^ --порядок следа 0:0,0:1,1:1. О, это так сильно ускорит мультиплексирование!! Сижу на телефоне, проверить не могу. Не могу дождаться, чтобы попробовать! - person Vitor Oliveira; 16.02.2019
comment
@VitorOliveira, у тебя уже была возможность попробовать? Это сработало? - person Stephan; 23.02.2019
comment
@Стефан, мне нечего тебе сказать, кроме большой благодарности. Я снялся во всем сериале «Южный парк» за один вечер. Это был мой первый раз, когда я пробовал пакетный скрипт для автоматизации работы (точнее, хобби), и мне было очень приятно видеть, как скрипт работает со всем сразу. - person Vitor Oliveira; 24.02.2019

Ну вот.

Перейдите к «** и сделайте с ним что-нибудь ** ПРЯМО ЗДЕСЬ **».

Здесь вы будете искать и заменять новый файл.

    @echo off

    :: This is the meat of the whole script..
    :: increment a number from 1 to 300
    for /L %%n in (1,1,300) do call :check_copy_file %%n
    goto :eof

    :: lines here will never execute because goto :eof is like "return" to cmd.exe

    :: ------------------------------------------------------
    :: function -- check_copy_file
    :: purpose  -- takes an input number, increments it, pads it with zeros 
    ::          -- copies original to new number name
    ::          -- ** and does stuff to it ** this is where you search and replace..
    :: ------------------------------------------------------
    :check_copy_file
    Set existing_file_num=%1
    Set /a new_file_num=%existing_file_num% +1

    call :pad_with_zeros existing_file_num %existing_file_num%
    call :pad_with_zeros new_file_num %new_file_num%

    :: ** if there isn't a batch file to copy, return
    if not exist %existing_file_num%.bat echo %existing_file_num%.bat doesn't exist!&& goto :eof

    :: copy (for instance 001.bat to 002.bat)
    copy %existing_file_num%.bat %new_file_num%.bat

    :: ** and does stuff to it ** RIGHT HERE ** 
    :: muck with the contents of %new_file_num%.bat
    echo mucky mucking with file %new_file_num%.bat

    goto :eof

    :: ---------------------------------------
    :: function -- pad_with_zeros
    :: purpose  -- adds up to two 0s as needed
    :: ---------------------------------------
    :pad_with_zeros
    Set input_var=%1
    Set input_val=%2
    if "%input_val:~2,1%"=="" Set input_val=0%input_val%
    if "%input_val:~2,1%"=="" Set input_val=0%input_val%
    Set %input_var%=%input_val%

    goto :eof
person Señor CMasMas    schedule 14.02.2019
comment
О.. еще одна вещь.. пока то, что вы редактируете, не содержит каких-либо «специальных символов» (например, › | и т. д.), вы также можете редактировать файл из пакета и не нужно вызвать блокнот++ - person Señor CMasMas; 14.02.2019
comment
Большое вам спасибо за вашу помощь. Почему-то выводит только одно и то же от 001.bat до 002.bat. Это ничего не меняет. Я даже пытался добавить :: к первому goto :eof, это должно его прокомментировать, верно? Есть ли что-то еще, что я должен изменить в сценарии, чтобы он работал? Я тестировал здесь с файлом 001.bat, который имеет что-то вроде этого aaaa 001__ bbbb 001__ ccc001, и он остается одинаковым для всех выводимых файлов. Еще раз большое спасибо за эту помощь. - person Vitor Oliveira; 15.02.2019
comment
Стефан совершенно прав со своим подходом выше. Он даже сделал заполнение 0 лучше, чем я. - person Señor CMasMas; 15.02.2019