Batch file 用于查找、替换和输出新文件的批处理脚本,每次求和一个

Batch file 用于查找、替换和输出新文件的批处理脚本,每次求和一个,batch-file,mkv,Batch File,Mkv,我正在用mkvmerge编辑一堆文件,我正在这样做: 来自original-001.mkvmux的视频和来自audio-001.mkv的音频,并添加来自sub-001.mkv的字幕 我正在创建一组.bat脚本,并使用notapad++find and replace函数执行以下操作: 查找001并替换002,另存为002.bat并继续 基本上,总会有一个名为001.bat的基本文件 真正棒的是,这个记事本++部分可以自动化。 查找所有字符串“001”,替换为“002”,另存为002.bat 找到

我正在用mkvmerge编辑一堆文件,我正在这样做:

来自
original-001.mkv
mux的视频和来自
audio-001.mkv
的音频,并添加来自
sub-001.mkv
的字幕

我正在创建一组.bat脚本,并使用notapad++find and replace函数执行以下操作:

查找001并替换002,另存为002.bat并继续

基本上,总会有一个名为001.bat的基本文件

真正棒的是,这个记事本++部分可以自动化。 查找所有字符串“001”,替换为“002”,另存为002.bat 找到“002”,替换为“003”,另存为003.bat

最多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)

最后我用这个:

call 001.bat
call 002.bat
call 003.bat
call 004.bat
call 005.bat
call 006.bat
and so on
但我都是手工完成的,所以对于mkvtoolnix的所有输出来说,一种自动化的方式将是惊人的,因为我可以使用高级重命名器将所有剧集更改为001002。。以及诸如此类的人和filebot,以获得正确的季和集列表

给你

转到“**并对其进行处理**就在这里**”

您将在此处搜索并替换新文件

    @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

我怀疑,生成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

请包括您希望我们帮助您修复的代码的一部分,该代码不符合书面和预期。目前,您的问题是离题的,因为它是一个需求列表,因此实际上是一个免费的脚本请求。如果没有代码,您的问题是离题的。一般来说,将批处理更改为包含一个从1001到1300的
for/l
计数循环,并且在循环内部仅使用最后3位数字来解决问题,前导零被解释为八进制。我完全理解你们的意思,但帮助这家伙花费的时间太少了。如果不通过“call:label%var%”使用批处理函数,批处理将是一件麻烦事。。现在他知道怎么做了。8^)@SeñorCMasMas:我怀疑回答a的y部分从长远来看是有帮助的,尤其是当x部分有一个简短的解决方案时。。还有一件事。。只要您正在编辑的内容中没有任何“特殊字符”(如>|等),您也可以从批处理中编辑该文件,而无需调用记事本++,非常感谢您的帮助。出于某种原因,它从001.bat到002.bat只输出相同的值。这不会改变任何事情。我甚至尝试将::添加到第一个goto:eof中,这应该会对其进行注释,对吗?还有什么我应该改变的脚本工作?我在这里用一个001.bat文件进行了测试,该文件的内容类似于aaaa 001_uuuuBB 001_uuuuuuCCC001,所有输出的文件都保持不变。再次感谢您的帮助。Stephan的上述方法完全正确。他甚至比我做得更好我同意。。我完全按照他的要求给了他。我可能应该提到这一点。斯蒂芬,我不知道可以这样做。我真的很想找到一个可能的“通用”解决方案。下面是一个脚本REM“C:/Program Files/MKVToolNix\mkvmerge.exe”--用户界面语言en--输出^“F:\original\original-001^(1^).mkv^”--语言0:eng--默认曲目0:yes--语言1:eng--默认曲目1:yes^(^)F:\original\original-001.mkv^^^)^”--无视频--语言1:por^(^)F:\BR001.mp4^)^”--轨道顺序为0:0,0:1,1:1。出于某种原因,它会在同一个文件上不断循环。如果它能从001变为002等等,那就太神奇了。@VitorOliveira用实际的
%number%
替换每个
001
怎么样,就像我在
echo
行中做的那样?哦,我在收到你的消息之前已经读了10遍了。你的意思是这样的“C:/Program Files/MKVToolNix\mkvmerge.exe”-ui语言en--输出^“F:\original\original-%number%^(1^).mkv^”--语言0:eng--默认音轨0:yes--语言1:eng--默认音轨1:yes^“^(^“^”F:\original\original-%number%.mkv^“^^”^”--无视频--语言1:por^(^)F:\BR%number%.mp4^^)^”--轨道顺序为0:0,0:1,1:1。哦,这将大大加快所有木星的速度!!我在打电话,现在无法测试。迫不及待地想尝试一下@维托罗利维拉你已经有机会尝试了吗?它起作用了吗?
@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