标题: [文件操作] [已解决]批处理怎样把mp3文件按播放时长归到不同文件夹? [打印本页]
作者: boy1900 时间: 2021-10-13 15:14 标题: [已解决]批处理怎样把mp3文件按播放时长归到不同文件夹?
本帖最后由 boy1900 于 2021-10-13 21:14 编辑
mp3经过分割后,按文件的时长排序,发现文件的播放时长0-5s不等。
希望把分割后的mp3中0s文件都移动到文件夹0,1s文件都移动到文件夹1………以此类推
说明:
1.文件名是外语录音的课次,与时长无关。比如第一课是 01.mp3
分割后的mp3的文件名是:
01-02.mp3
01-04.mp3
01-06.mp3
等等
2.分割后的mp3的时长会有小数点,精确到小数点后三位。
移动时,舍去小数点后的数字,直接是几秒,就算作几秒。
比如:
0:03.740的算作3s,移动到文件夹3
0:01.241的算作1s,移动到文件夹1
0:02.300的算作2s,移动到文件夹2
作者: taofan712 时间: 2021-10-13 15:43
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=2 delims=:." %%a in ('dir /b *.mp3') do (
- set /a name=%%a+0
- if not exist !name! md !name!
- move %%a !name!
- )
- pause
复制代码
假设你的MP3文件名即为时间长度。
作者: boy1900 时间: 2021-10-13 16:28
本帖最后由 boy1900 于 2021-10-13 16:31 编辑
回复 2# taofan712
感谢解答!我说明的不够详细。
文件名是外语录音的课次,与时长无关。比如第一课是 01.mp3
分割后的mp3的文件名是:
01-02.mp3
01-04.mp3
01-06.mp3
等等
它们的时长在0-5s不等,可以通过筛选排序。
如果可以表示出每个mp3的时长,再设定一个时间范围,应该可以实现mp3按秒数归类。
作者: idwma 时间: 2021-10-13 16:50
- #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
- $a=New-Object -ComObject Shell.Application
- dir *.mp3|%{
- $b=$a.namespace($_.directoryname)
- $c=$b.getdetailsof($b.parsename($_.name),27)
- $d=([TimeSpan]$c).TotalSeconds
- md $d
- move $_.name $d
- }
复制代码
作者: boy1900 时间: 2021-10-13 18:55
回复 4# idwma
非常感谢!程序能有效对MP3文件进行归类。
在执行过程中,出现了以下的同名文件夹存在的提示。
可否请大大再优化一下?
md : 具有指定名称 C:\Users\boy1900\默认分割组\1 的项已存在。
所在位置 行:7 字符: 1
+ md $d
+ ~~~~~
+ CategoryInfo : ResourceExists: (C:\Users\boy1900\默认分割组\1:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
md : 具有指定名称 C:\Users\boy1900\默认分割组\3 的项已存在。
所在位置 行:7 字符: 1
+ md $d
+ ~~~~~
+ CategoryInfo : ResourceExists: (C:\Users\boy1900\默认分割组\3:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
作者: idwma 时间: 2021-10-13 19:08
回复 5# boy1900 - #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
- $a=New-Object -ComObject Shell.Application
- dir *.mp3|%{
- $b=$a.namespace($_.directoryname)
- $c=$b.getdetailsof($b.parsename($_.name),27)
- $d=([TimeSpan]$c).TotalSeconds
- if(!(test-path $d)){md $d}
- move $_.name $d
- }
复制代码
作者: boy1900 时间: 2021-10-13 21:10
回复 6# idwma
非常感谢大大的帮助!!
优化过后的执行界面也非常简洁美观,再次感谢!![抱拳]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |