用于查找、替换和输出新文件并每次求和的批处理脚本
Batch script to find, replace and output new file and sum one each time
我正在使用 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.
最多 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.. 等等,然后使用 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
我正在使用 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.
最多 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.. 等等,然后使用 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