中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]关于VBS脚本的小问题([新手],制作M3U播放列表)
<   <<   [1] [2]  >>
作者:
标题: [求助]关于VBS脚本的小问题([新手],制作M3U播放列表) 上一主题 | 下一主题
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 16 楼』:  

dir /s/b d:\mp3\*.mp3 >d:\mp3.m3u没编号。。(不过P加一个也是可以)


2007-2-17 06:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ebfok
初级用户





积分 87
发帖 33
注册 2006-6-20
来自 cs
状态 离线
『第 17 楼』:  

我来转一个老外写的 'Mp3Playlister - multiList 'recursive m3u playlists generator 'create one playlist for each folder/subfolder containing mp3 files in the user specified path(s), all playlists are saved in each user specified path(s) and use absolute paths 'File Name : Mp3Playlister_multiList.vbs 'Requirement : mp3 files 'Author : la boost 'Submitted : 20/04/2002 '********************************************************************************* 'script : Mp3Playlister_multiList.vbs 'description: recursive m3u playlists generator : ' create one playlist for each folder/subfolder containing ' mp3 files in the user specified path(s), all playlists ' are saved in each user specified path(s) and use absolute paths 'usage : create a shortcut to this file in the "SendTo" folder or drag-drop folders on it 'date : 20.04.2002 'version : 1.2 ' - 1.2 : add customized name(s) for playlists folder(s) ' - 1.2 : use WScript.Arguments for multiple folders ' - 1.2 : remove user interaction (no more input dialog) ' - 1.1 : use WScript.Arguments for single folder ' - 1.0 : initial 'author : la_boost@yahoo.com '********************************************************************************* '*********************************** 'BEGIN '*********************************** Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const sAppName = "Mp3Playlister - Recursive playlist generator" '-- lowercase file extension to search for Const sExtToGet = "mp3" '-- playlist file extension Const sPlaylistExt = "m3u" '-- playlists folders naming Const sPrefixFolder = "0-- " Const sPostfixFolder = " --0" Dim fso, WshShell, cptTot, objArgs, arg, dicPlaylistsPath Dim driveLetter, sScannedFoldName, nTime Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Set dicPlaylistsPath = CreateObject("Scripting.Dictionary") cptTot = 0 nTime = Timer Set objArgs = WScript.Arguments if (objArgs.Count = 0) then WshShell.Popup "You must specify a directory. ", 5, sAppName, 48 WScript.Quit End If '-- start scanning Call startScanning() Call endPopup() '-- explore playlists (open the last scanned folder only) 'Call explore(dicPlaylistsPath.item(sScannedFoldName)) '-- clean Set fso = nothing Set WshShell = nothing Set dicPlaylistsPath = nothing '*********************************** 'END '*********************************** '*********************************** 'FUNCTIONS: '*********************************** Sub startScanning() Dim arg, fold '-- loop on user defined paths For each arg in objArgs If fso.FolderExists(arg) Then Set fold = fso.Getfolder(arg) sScannedFoldName = fold.Name driveLetter = fold.Drive '-- get folder for saving the playlists Call setPlaylistsSavePath(sScannedFoldName) '-- recurse folder Call DoIt(fold) End If Next End Sub '********************************************************************************* Sub endPopup() WshShell.Popup "Finished. " & chr(13) & chr(13) & cptTot & _ " files have been playlisted (total) in " & chr(13) & _ Join(dicPlaylistsPath.items, vbCrLf) & Chr(13) & Chr(13) & _ showTime(nTime), 0, sAppName, 64 End Sub '********************************************************************************* Sub AddFiles(fold) '-- process all mp3 files in the fold folder and save as playlist Dim strExt, mpFiles, strName, arrFiles(), foldPath, cpt, f ReDim arrFiles(0) cpt = 0 foldPath = fold.Path Set mpfiles = fold.Files For each f in mpfiles strName = f.Name strExt = LCase(fso.GetExtensionName(strName)) If strExt = sExtToGet Then arrFiles(cpt) = foldPath &"\"& UCase(Left(strName, 1)) & Mid(strName,2,Len(strName)) ReDim Preserve arrFiles(UBound(arrFiles)+1) cpt = cpt + 1 End If Next '-- save playlist if more than 0 entry in it If (UBound(arrFiles) > 0) Then cptTot = cptTot + cpt '-- global counter for processed files Call Quicksort(arrFiles,0,cpt-1) Call createAndSavePlaylist(arrFiles, fold.Name) End If End Sub '********************************************************************************* Sub createAndSavePlaylist(arrFiles, foldName) Dim txt, txtFile, txtPath '-- m3u file path txtPath = dicPlaylistsPath.item(sScannedFoldName) & foldName &"."& sPlaylistExt '-- create m3u file (ASCII) If Not fso.FileExists(txtPath) Then Set txtFile = fso.CreateTextFile(txtPath,true,false) 'ASCII !! End If Set txtFile = fso.GetFile(txtPath) Set txt = txtFile.OpenAsTextStream(ForWriting, 0) 'ForWriting , 0 for ASCII (-1 for Unicode) '-- write m3u entries txt.write Join(arrFiles, vbCrLf) txt.close Set txtFile = nothing End Sub '********************************************************************************* Sub DoIt(fold) '-- recursive scan Dim sfold, sfoo Call AddFiles(fold) 'process files in current folder Set sfold = fold.subfolders for each sfoo in sfold 'process files in subfolders Call DoIt(sfoo) Next End Sub '********************************************************************************* Sub explore(path) '-- open windows explorer WshShell.Run "explorer "& path WScript.Sleep 100 WshShell.AppActivate "explorer" End Sub '********************************************************************************* Sub setPlaylistsSavePath(foldName) Dim sPlaylistsPath sPlaylistsPath = driveLetter &"\"& sPrefixFolder & foldName & sPostfixFolder &"\" dicPlaylistsPath.add foldName, sPlaylistsPath If Not fso.FolderExists(sPlaylistsPath) Then 'WshShell.Popup "Creating playlist folder. " & sPlaylistsPath, 1, sAppName, 64 fso.CreateFolder(sPlaylistsPath) End If End Sub '********************************************************************************* Function showTime(nTime) showTime = "Elapsed time : " & Round((Timer - nTime),2) &" seconds" End Function '********************************************************************************* Sub QuickSort(vec,loBound,hiBound) Dim pivot,loSwap,hiSwap,temp '== This procedure is adapted from the algorithm given in: '== Data Abstractions & Structures using C++ by '== Mark Headington and David Riley, pg. 586 '== Quicksort is the fastest array sorting routine for '== unordered arrays. Its big O is n log n '== Two items to sort if hiBound - loBound = 1 then if vec(loBound) > vec(hiBound) then temp=vec(loBound) vec(loBound) = vec(hiBound) vec(hiBound) = temp End If End If '== Three or more items to sort pivot = vec(int((loBound + hiBound) / 2)) vec(int((loBound + hiBound) / 2)) = vec(loBound) vec(loBound) = pivot loSwap = loBound + 1 hiSwap = hiBound do '== Find the right loSwap while loSwap < hiSwap and vec(loSwap) <= pivot loSwap = loSwap + 1 wend '== Find the right hiSwap while vec(hiSwap) > pivot hiSwap = hiSwap - 1 wend '== Swap values if loSwap is less then hiSwap if loSwap < hiSwap then temp = vec(loSwap) vec(loSwap) = vec(hiSwap) vec(hiSwap) = temp End If loop while loSwap < hiSwap vec(loBound) = vec(hiSwap) vec(hiSwap) = pivot '== Recursively call function .. the beauty of Quicksort '== 2 or more items in first section if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1) '== 2 or more items in second section if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound) End Sub 'QuickSort '*********************************************************************************


2007-5-17 10:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ebfok
初级用户





积分 87
发帖 33
注册 2006-6-20
来自 cs
状态 离线
『第 18 楼』:  

再转一个: 'Mp3Playlister - singleList 'create ONE single m3u playlist for ALL mp3 files 'The generated playlist is saved in the scanned folder and uses absolute paths 'File Name : Mp3Playlister_singleList.vbs 'Requirement : mp3 files 'Author : la boost 'Submitted : 22/04/2002 '********************************************************************************* 'script : Mp3Playlister_singleList.vbs 'description: recursive m3u playlist generator : ' create ONE single playlist for ALL mp3 files ' found in the selected path, the generated playlist ' is saved in the scanned folder and uses absolute paths 'usage : create a shortcut to this file in the "SendTo" folder or drag-drop folder on it 'date : 13.04.2002 'version : 1.1 'author : la_boost@yahoo.com '********************************************************************************* '*********************************** 'BEGIN '*********************************** Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso, WshShell, cptTot, objArgs, arrFiles(), sExtToGet Dim driveLetter, pathToScan, fold, nTime, sAppName Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") sAppName = "Mp3Playlister - Recursive playlist generator" '-- lowercase file extension to search for sExtToGet = "mp3" Set objArgs = WScript.Arguments if ( objArgs.Count = 0 ) then WshShell.Popup "You must specify a directory. ", 5, sAppName, 48 WScript.Quit end if pathToScan = objArgs(0) nTime = Timer '-- start scanning Call startScanning() '-- clean Set fso = nothing Set WshShell = nothing '*********************************** 'END '*********************************** '*********************************** 'FUNCTIONS: '*********************************** Sub startScanning() Dim i, cpt, playlistPath cptTot = 0 If fso.FolderExists(pathToScan) Then ReDim arrFiles(0) Set fold = fso.Getfolder(pathToScan) playlistPath = fold.path &"\"& fold.Name & ".m3u" '-- recurse folder Call DoIt(fold) Else WshShell.Popup "Folder """& pathToScan &""" does not exist. ", 5, sAppName, 48 Wscript.quit End If '-- save playlist if more than 0 entry in it If (UBound(arrFiles) > 0) Then Call Quicksort(arrFiles,0,cptTot-1) Call createAndSavePlaylist(arrFiles, playlistPath) End If WshShell.Popup "Finished. " & chr(13) & chr(13) & cptTot & _ " files have been playlisted in " & _ pathToScan & Chr(13) & Chr(13) & showTime(nTime) _ , 0, sAppName, 64 End Sub '********************************************************************************* Sub AddFiles(fold) '-- process all mp3 files in the fold folder Dim strExt, mpFiles, strName, foldName, foldPath, f foldPath = fold.Path Set mpfiles = fold.Files For each f in mpfiles strName = f.Name strExt = LCase(fso.GetExtensionName(strName)) If strExt = sExtToGet Then arrFiles(cptTot) = foldPath &"\"& UCase(Left(strName, 1)) & Mid(strName,2,Len(strName)) ReDim Preserve arrFiles(UBound(arrFiles)+1) cptTot = cptTot + 1 '-- global counter for processed files End If Next End Sub '********************************************************************************* Sub createAndSavePlaylist(arrFiles, playlistPath) Dim txt, txtFile '-- create m3u file (ASCII) If Not fso.FileExists(playlistPath) Then Set txtFile = fso.CreateTextFile(playlistPath,true,false) 'ASCII !! End If Set txtFile = fso.GetFile(playlistPath) Set txt = txtFile.OpenAsTextStream(ForWriting, 0) 'ForWriting , 0 for ASCII (-1 for Unicode) '-- write m3u entries txt.write Join(arrFiles,vbCrLf) txt.close Set txtFile = nothing End Sub '********************************************************************************* Sub DoIt(fold) '-- recursive scan Dim sfold, sfoo Call AddFiles(fold) 'process files in current folder Set sfold = fold.subfolders for each sfoo in sfold 'process files in subfolders Call DoIt(sfoo) Next End Sub '********************************************************************************* Function showTime(nTime) showTime = "Elapsed time : " & Round((Timer - nTime),2) &" seconds" End Function '********************************************************************************* Sub QuickSort(vec,loBound,hiBound) Dim pivot,loSwap,hiSwap,temp '== This procedure is adapted from the algorithm given in: '== Data Abstractions & Structures using C++ by '== Mark Headington and David Riley, pg. 586 '== Quicksort is the fastest array sorting routine for '== unordered arrays. Its big O is n log n '== Two items to sort if hiBound - loBound = 1 then if vec(loBound) > vec(hiBound) then temp=vec(loBound) vec(loBound) = vec(hiBound) vec(hiBound) = temp End If End If '== Three or more items to sort pivot = vec(int((loBound + hiBound) / 2)) vec(int((loBound + hiBound) / 2)) = vec(loBound) vec(loBound) = pivot loSwap = loBound + 1 hiSwap = hiBound do '== Find the right loSwap while loSwap < hiSwap and vec(loSwap) <= pivot loSwap = loSwap + 1 wend '== Find the right hiSwap while vec(hiSwap) > pivot hiSwap = hiSwap - 1 wend '== Swap values if loSwap is less then hiSwap if loSwap < hiSwap then temp = vec(loSwap) vec(loSwap) = vec(hiSwap) vec(hiSwap) = temp End If loop while loSwap < hiSwap vec(loBound) = vec(hiSwap) vec(hiSwap) = pivot '== Recursively call function .. the beauty of Quicksort '== 2 or more items in first section if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1) '== 2 or more items in second section if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound) End Sub 'QuickSort '*********************************************************************************


2007-5-17 10:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<   <<   [1] [2]  >>
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: