返回列表 发帖
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg
for /d %%d in (*) do (
pushd "%%d"
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
echo file '%%~fi'
))>xxx.txt
if exist xxx.txt if not exist "%~dp0%%~nxd.mp3" (
"%~dp0ffmpeg.exe" -f concat -safe 0 -i xxx.txt -c copy "%~dp0%%~nxd.mp3"
)
del xxx.txt 2>nul
popd
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 4# qd2024


   文件名
0106do①s⑶(1)
0040to①s⑴(1)
0015I'm=I am(1)COPY


太特殊了,我不会处理
只能重命名。
以下代码执行完第一个,再执行第二个,注意编码格式。
@echo off
rem 批处理保存为ansi编码格式
setlocal enabledelayedexpansion
for /d %%d in (*) do (
robocopy "%%d" "%%d-copy" *.mp3
pushd "%%d-copy"
set n=100000
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
set /a n+=1
ren "%%i" "!n:~-5!.mp3"
echo file '!n:~-5!.mp3'
))>xxx.txt
popd
)
exitCOPY


@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg
for /f "delims=" %%d in ('dir /b /ad ^|find /v "-copy"') do (
pushd "%%d-copy"
if exist xxx.txt if not exist "%~dp0%%~nxd.mp3" (
ffmpeg -f concat -safe 0 -i xxx.txt -c copy "%~dp0%%~nxd.mp3"
)
del xxx.txt 2>nul
popd
rd /s /q "%%d-copy"
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

ffmpeg 改为 "%~dp0ffmpeg.exe"
经常用的话,可以添加到计算机的环境变量
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-7-27 17:53 编辑

回复 8# qd2024

@echo off
rem http://www.bathome.net/redirect.php?goto=findpost&ptid=63860&pid=259594
rem 删除当前目录及子目录下 所有文件夹名、文件名中的符号; “_”、“-”、“.” 这三个除外,我自己瞎改的。
powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\w\.]')}"
exitCOPY


那就使用原始代码好了,每次先使用上面的代码清除文件(夹)名称中的符号。忽略报错信息。
bat小白,请多指教!谢谢!

TOP

回复 10# qd2024


   
直接使用就行,忽略报错信息
bat小白,请多指教!谢谢!

TOP

回复 12# qd2024


   
我测试9楼的代码,正常删除 " ( "  ")",重复执行试试。
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-7-28 10:38 编辑

回复 15# qd2024


   
没想到点号对于ffmpeg还有影响。
@echo off
rem 当前目录下的子目录中只存在mp3文件,用于去除所有符号,不含 “-_” 及扩展名中的点号
for /d %%d in (*) do (
        pushd "%%d"
        ren "*.mp3" "*."
        powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\w]')}"
        ren "*" "*.mp3"
        popd
)COPY
bat小白,请多指教!谢谢!

TOP

回复 18# qd2024


   ffmpeg对于音视频的处理比较粗糙,如果不行,得寻找更专业的软件,或者高明的代码处理,得专业的人来干。
bat小白,请多指教!谢谢!

TOP

回复 20# qd2024


  
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
for /f "tokens=1-2 delims==" %%a in ('ffprobe -loglevel 0 -show_streams "%%i" ^|findstr /bc:"bit_rate="') do (
if not "%%b" equ "128000" (
ffmpeg -i "%%i" -ab 128k "xxx.mp3"
move /y "xxx.mp3" "%%i"
)
)
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2023-8-7 00:50 编辑

回复 23# qd2024


  
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
        setlocal enabledelayedexpansion
        ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"bit_rate=128000" 1>nul || set str1=-ab 128k
        ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"sample_rate=44100" 1>nul || set str2=-ar 44100
        if not defined str1 if not defined str2 (
                ver >nul
        ) else (
                ffmpeg -i "%%i" !str1! !str2! "xxx.mp3"
                move /y "xxx.mp3" "%%i"
        )
        endlocal
)
pauseCOPY
20230807 修改一下 if not if not 这个不太规范,逻辑可能有时候会出问题。
@echo off
chcp 65001 >nul
rem 批处理保存为utf-8编码格式,需要ffmpeg ffprobe,自行修改相关路径
for /f "delims=" %%i in ('dir /b /s /a-d *.mp3') do (
setlocal enabledelayedexpansion
ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"bit_rate=128000" 1>nul || set str1=-ab 128k
ffprobe -loglevel 0 -show_streams "%%i" |findstr /xc:"sample_rate=44100" 1>nul || set str2=-ar 44100
if "!str1!!str2!" neq "" (
ffmpeg -i "%%i" !str1! !str2! "xxx.mp3"
move /y "xxx.mp3" "%%i"
)
endlocal
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

紧急通知:问题解决后,请不要大肆修改提问帖
最近几天,发现一些会员喜欢在问题解决后,大肆修改提问帖,甚至要求管理层删帖,这一行为影响十分恶劣:论坛所有的帖子,无论当初的问题有多么简单,都会给后来者以学习的机会,它们都是论坛宝贵的资料;如果大家在问题解决之后,把帖子修改得面目全非,甚至要求删帖,不仅是对跟帖者极大的不尊重,还会造成学习资料的破坏——如果大家都把帖子删掉,论坛还能剩下什么可供学习的资料呢?
1

评分人数

bat小白,请多指教!谢谢!

TOP

@echo off
rem 批处理保存为ansi编码格式
rem 使用前先备份
rem 第1次执行为备份文件名,第2次执行为恢复文件名。
rem 批处理在各目录下生成一个 listx.txt 保存原始文件名。各目录下mp3文件 “序号”不变、数量不变 前提下使用。
dir /b /s /a-d listx.txt 1>nul 2>&1 && goto :re
for /d %%d in (*) do (
pushd "%%d"
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
echo %%i
))>listx.txt
popd
)
pause
exit
:re
rem http://bbs.bathome.net/viewthread.php?tid=66400
setlocal enabledelayedexpansion
for /d %%d in (*) do (
pushd "%%d"
(for /f "delims=" %%i in ('dir /b /a-d *.mp3 ^|sort') do (
set /p str=
ren "%%i" "!str!"
))<"listx.txt"
del "listx.txt"
popd
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

返回列表