首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理文件播放列表随机排序

批处理文件播放列表随机排序
EN

Stack Overflow用户
提问于 2013-03-22 11:04:02
回答 3查看 974关注 0票数 2

我已经做了一个小的批处理文件程序来创建一个播放列表

代码语言:javascript
复制
@echo off
DIR /S /o:n /b *.avi > Playlist.m3u

有没有办法改变这一点,让它在每次运行时都按随机顺序排序?

EN

回答 3

Stack Overflow用户

发布于 2013-03-22 12:55:20

这是可以做到的,但它不会很漂亮!你能使用更好的平台而不是批处理文件吗?也许这正是你期待已久的学习Powershell的机会!:-)

但是,如果您坚持使用批处理,以下是我尝试的一般方法:

  1. 计算文件夹中的.avi文件数。
  2. 在0和此数字之间随机选择一个数字。例如,set /a randomLineNum=%random% %% 10会将% echo %%L > Playlist.m3u.
  3. Go LineNum%设置为0到9之间的数字。
  4. 使用类似for /f "skip=%randomLineNum%" %%L in ('dir /s /o:n /b *.avi') ...的命令来获取随机行,并将其返回到#2。

这种简单化的方法最终会得到重复的结果,而我并没有以任何方式构建来退出循环。我将这些问题留给您来解决(或者在将来的问题中提出)。:-)

票数 1
EN

Stack Overflow用户

发布于 2013-03-22 13:59:22

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
::
:: establish a tempfile name
::
:temploop
SET tempfile="%temp%\temp%random%.tmp"
IF EXIST %tempfile% GOTO temploop
::
:: Write the list of filenames with each
:: prefixed by a random number and a colon
::
(FOR /f "delims=" %%i IN (
  'dir /s/b *.avi'
 ) DO ECHO !random!:%%i
)>%tempfile% 
::
:: Write the playlist.
:: sort the tempfile (which places it 
:: in random order) and remove the number:
::
(FOR /f "tokens=1*delims=:" %%i IN (
  ' sort ^<%tempfile% ') DO ECHO %%j
) >playlist.m3u
::
:: and delete the tempfile.
::
DEL %tempfile% 2>NUL

应该可以工作-但如果您的文件/路径名包含!,则it 将会有困难

代码中的文档。

票数 0
EN

Stack Overflow用户

发布于 2013-03-22 17:11:59

没有临时文件的解决方案:

代码语言:javascript
复制
@echo off &setlocal
set "playlist=Playlist.m3u"
del %playlist% 2>nul
set /a files=0
for %%i in (*.avi) do set /a files+=1
if %files% equ 0 (echo No AVI found&goto:eof) else echo %files% AVI's found.
set /a cnt=%files%-1
for /l %%i in (0,1,%cnt%) do for /f "delims=" %%a in ('dir /b /a-d *.avi^|more +%%i') do if not defined $avi%%i set "$avi%%i=%%a"
:randomloop
set /a rd=%random%%%%files%
call set "avi=%%$avi%rd%%%"
if not defined avi goto :randomloop
set "$avi%rd%="
>>%playlist% echo %avi%
set /a cnt-=1
if %cnt% geq 0 goto:randomloop
echo Done!
endlocal

它不使用DelayedExpansion,因此它可以处理名称中带有感叹号的文件。这需要更多的时间,但也不需要临时文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15561997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档