Board logo

标题: [文件操作] 批处理如何找到比其长2-3分钟的并移动过去 [打印本页]

作者: 877    时间: 2023-12-3 13:53     标题: 批处理如何找到比其长2-3分钟的并移动过去

E盘\A目录-多子文件夹内各有一个wav

D盘\mp3目录有N个长短不一的mp3歌曲

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

要求所移动的mp3时长要比wav时长*至少长2-3分钟。

找到长2-3分钟的就移动到对应wav子文件夹

求大佬帮忙写个bat命令,谢谢~
作者: terse    时间: 2023-12-3 15:11

对移动的mp3除了时长要求,没有别的要求了吧
作者: 877    时间: 2023-12-3 16:56

回复 2# terse


    是的,就是时长比wav长2-3分钟就行~感谢大佬,上次您给写过一次,是比其长一点,想具体到长2-3分钟~,谢谢大佬~
作者: terse    时间: 2023-12-3 18:22

  1. @set @x=0 /* & @echo off
  2. cd /d "d:\mp3\"
  3. dir /b /a-d *.mp3|cscript -nologo -e:jscript %0 "e:\a\"
  4. pause & exit */
  5. var WMP = new ActiveXObject("WMPlayer.OCX");
  6. var i = 0; mediafiles = [];
  7. var Arg = WSH.Arguments;
  8. while (!WSH.StdIn.AtEndOfStream) {
  9.      var file =  WSH.StdIn.ReadLine();
  10.      mediafiles[i++] = ({file: file, duration: Math.floor(WMP.newMedia(file).GetItemInfo("Duration"))});
  11. }
  12. mediafiles.sort(function(a, b) { return a.duration - b.duration; });
  13. function binarySearch(mediafiles, t) {
  14.      var left = 0, right = mediafiles.length - 1;
  15.      while (left < right) {
  16.           var mid = Math.floor((left + right) >> 1);
  17.           if (mediafiles[mid].duration > t) {
  18.                right = mid;
  19.           } else {
  20.                left = mid + 1;
  21.           }
  22.      }
  23.      return (left < mediafiles.length) ? left : null;
  24. }
  25. var fso = new ActiveXObject("Scripting.FileSystemObject");
  26. var ss = 150;
  27. var folder = fso.GetFolder(Arg.Item(0));
  28. var subfolders = new Enumerator(folder.Subfolders);
  29. for (; !subfolders.atEnd(); subfolders.moveNext()) {
  30.      var subfolder = subfolders.item();
  31.      var files = new Enumerator(subfolder.files);
  32.      for (; !files.atEnd(); files.moveNext()) {
  33.           var file = files.item();
  34.           var ext = file.Name.slice(file.Name.lastIndexOf(".")+1).toLowerCase();
  35.           if (ext === 'wav') {
  36.                var duration = Math.floor(WMP.newMedia(file.Path).GetItemInfo("Duration"));
  37.                var Index = binarySearch(mediafiles, duration + ss);
  38.                if (Index !== null) {
  39.                     fso.CopyFile(mediafiles[Index].file, subfolder + '\\');
  40.                     WSH.Echo(mediafiles[Index].file, ' ==> ' ,subfolder);
  41.                     mediafiles.splice(Index, 1);
  42.                }
  43.           }
  44.      }
  45. }
复制代码
回复 3# 877
作者: 877    时间: 2023-12-3 22:43

回复 4# terse


    感谢大佬,技术真牛,非常厉害!谢谢您!!




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