[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助批处理根据wav时长,找比它长一点的mp3

已知:A目录下-多子文件夹内各有一个wav

另外指定的D盘\mp3目录有N个长短不一的mp3文件

想实现用批处理,从D盘\mp3目录各移动一个到相应的A目录下-多子文件夹内。(形成各子文件夹内1个wav和1个mp3)

要求所移动的mp3时长要比wav时长*长一点。

求大佬指教~

怎么样才算是长一点,而不是长了两点

QQ 20147578

TOP

回复 2# czjt1234


    大佬好,加1秒~300秒都算,因为mp3文件夹里面太多音频了~

  求大佬帮忙☕

TOP

试一下BAT_JS混编呢
  1. @set @x=0 /* @echo off&cscript -nologo -e:jscript %0 "D:\mp3" "E:\data" & pause & exit */
  2. var pad = function (n) { return ('0'+Math.floor(n)).slice(-2)}
  3. var fso=new ActiveXObject("Scripting.FileSystemObject");
  4. var WMP = new ActiveXObject("WMPlayer.OCX");
  5. var i = 0, mediaFiles = [];
  6. var Folder=fso.GetFolder(WScript.Arguments.Item(0));
  7. for(var e=new Enumerator(Folder.Files);!e.atEnd();e.moveNext()){
  8.       var f=e.item();
  9.       var ext = f.Name.split('.').pop().toLowerCase();
  10.       if (ext === 'mp3') {
  11.             mediaFiles[i++] = {file: f, duration: Math.floor(WMP.newMedia(f).GetItemInfo("Duration"))};
  12.       }
  13. }
  14. mediaFiles.sort(function(a, b) { return a.duration - b.duration});
  15. function binarySearch(mediaFiles, t) {
  16.        var left = 0, right = mediaFiles.length - 1;
  17.        while (left < right) {
  18.            var mid = Math.floor((left + right) >> 1);
  19.            if (mediaFiles[mid].duration > t) {
  20.                 right = mid;
  21.            } else {
  22.                 left = mid + 1;
  23.            }
  24.        }
  25.        return (left < mediaFiles.length) ? left : null;
  26. }
  27. var Folder=fso.GetFolder(WScript.Arguments.Item(1));
  28. for(var e=new Enumerator(Folder.SubFolders);!e.atEnd();e.moveNext()){
  29.       var subFolder=e.item();
  30.       for(var f=new Enumerator(subFolder.Files);!f.atEnd();f.moveNext()){
  31.             var file=f.item();
  32.             var ext = file.Name.split('.').pop().toLowerCase();
  33.             if (ext === 'wav') {
  34.                   var t = WMP.newMedia(file).GetItemInfo("Duration");
  35.                   var FileIndex = binarySearch(mediaFiles, t);
  36.                   if (FileIndex !== null) {
  37.                         var ToFile = mediaFiles[FileIndex];
  38.                         fso.CopyFile(ToFile.file, subFolder+'\\');
  39.                         mediaFiles.splice(FileIndex, 1);
  40.                   }
  41.             }
  42.       }
  43. }
复制代码

TOP

回复 4# terse


    感谢大佬,虽然看不懂,但是还是想问下,单独bat代码可以实现吗?

TOP

回复 5# 877
保存为BAT文件 第一排这里的路径 自己修改一下  "D:\mp3" "E:\data"

TOP

本帖最后由 877 于 2023-10-31 22:09 编辑

回复 6# terse


    感谢大佬,测试成功了!万分感谢!

TOP

返回列表