批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文件操作] [已解决]批处理怎样把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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:." %%a in ('dir /b *.mp3') do (
  4. set /a name=%%a+0
  5. if not exist !name! md  !name!
  6. move %%a !name!
  7. )
  8. pause
复制代码
假设你的MP3文件名即为时间长度。

TOP

本帖最后由 boy1900 于 2021-10-13 16:31 编辑

回复 2# taofan712


    感谢解答!我说明的不够详细。
文件名是外语录音的课次,与时长无关。比如第一课是 01.mp3
分割后的mp3的文件名是:
01-02.mp3
01-04.mp3
01-06.mp3
等等
它们的时长在0-5s不等,可以通过筛选排序。
如果可以表示出每个mp3的时长,再设定一个时间范围,应该可以实现mp3按秒数归类。

TOP

  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $a=New-Object -ComObject Shell.Application
  3. dir *.mp3|%{
  4. $b=$a.namespace($_.directoryname)
  5. $c=$b.getdetailsof($b.parsename($_.name),27)
  6. $d=([TimeSpan]$c).TotalSeconds
  7. md $d
  8. move $_.name $d
  9. }
复制代码

TOP

回复 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

TOP

回复 5# boy1900
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $a=New-Object -ComObject Shell.Application
  3. dir *.mp3|%{
  4. $b=$a.namespace($_.directoryname)
  5. $c=$b.getdetailsof($b.parsename($_.name),27)
  6. $d=([TimeSpan]$c).TotalSeconds
  7. if(!(test-path $d)){md $d}
  8. move $_.name $d
  9. }
复制代码
1

评分人数

TOP

回复 6# idwma


    非常感谢大大的帮助!!
优化过后的执行界面也非常简洁美观,再次感谢!![抱拳]

TOP

返回列表