Board logo

标题: [文本处理] 求助批处理根据wav时长,找比它长一点的mp3 [打印本页]

作者: 877    时间: 2023-10-31 08:28     标题: 求助批处理根据wav时长,找比它长一点的mp3

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

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

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

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

求大佬指教~
作者: czjt1234    时间: 2023-10-31 13:33

怎么样才算是长一点,而不是长了两点
作者: 877    时间: 2023-10-31 15:00

回复 2# czjt1234


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

  求大佬帮忙☕
作者: terse    时间: 2023-10-31 18:53

试一下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. }
复制代码

作者: 877    时间: 2023-10-31 20:17

回复 4# terse


    感谢大佬,虽然看不懂,但是还是想问下,单独bat代码可以实现吗?
作者: terse    时间: 2023-10-31 21:17

回复 5# 877
保存为BAT文件 第一排这里的路径 自己修改一下  "D:\mp3" "E:\data"
作者: 877    时间: 2023-10-31 22:02

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

回复 6# terse


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2