中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助 关于随机生成一个文件列表
作者:
标题: 求助 关于随机生成一个文件列表 上一主题 | 下一主题
rrrrfcu3
新手上路





积分 12
发帖 5
注册 2007-11-6
状态 离线
『楼 主』:  求助 关于随机生成一个文件列表

从原来来路径的文件列表中随机选取几个成一个新列表
例如:\gequ\angela06-01.wma
  D:\gequ\yinxingdcb.wma
  D:\gequ\rgaxq.mp3
  D:\gequ\316515760.mp3
  D:\gequ\tl.mp3
  D:\gequ\OIkRHUbe.mp3
  D:\gequ\bengpao.mp3
  D:\gequ\20061017151241308.mp3
  D:\gequ\love.mp3
  D:\gequ\qiutian.mp3
  D:\gequ\28.mp3
我要从中随机选取3个到新列表

原来我想从数序中随机选取几个数字,然后给数字赋值,可是我却不能用来替换数傎
@echo off
set 1=D:\gequ\zuichudemengxiang.mp3
echo %1%>>1.txt
pause

请问如何解决?

2007-11-6 23:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

N久前就有讨论过
http://www.cn-dos.net/forum/viewthread.php?tid=22128

这是我的一段
@echo off
for /f "delims=" %%i in ('dir/a-d/b *.mp3') do call set $%%random%%$%%i=$
for /f "tokens=1,2* delims=$=" %%i in ('set $') do echo %%j
pause




2007-11-7 01:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rrrrfcu3
新手上路





积分 12
发帖 5
注册 2007-11-6
状态 离线
『第 3 楼』:  

昨天晚上我翻了以前的帖子,以前的只是随机生成一个播放列表,达到随机播放的目的,而我的要求只随机选取部分到新列表,再有,我这得加上路径

2007-11-7 07:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

根据这个改一下
@echo off
for /f "delims=" %%i in ('dir/a-d/b *.mp3') do (
  set /a n+=1
  call set list%%n%%=%%i
)
echo 1 to %n%
set /p m=
call echo %%list%m%%%
pause
[ Last edited by zh159 on 2007-11-7 at 11:42 AM ]



2007-11-7 11:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rrrrfcu3
新手上路





积分 12
发帖 5
注册 2007-11-6
状态 离线
『第 5 楼』:  

我的思路是通过数字生成随机数五个
@echo off
:start
cls
set Num=
set Tmp$=

:loop
set /a randomloop=%random%%%99+1
for %%n in (%Tmp$%) do if "%randomloop%" == "%%n" goto loop
call set Tmp$=%%Tmp$%% %randomloop%
set /a Num+=1
set random_%Num%=%randomloop%
if %Num% LSS 5 goto loop

for /l %%n in (1,1,%Num%) do call set /p= %%random_%%n%%<nul
echo.>>A.txt
pause
goto start
exit

我再定义每个带路径的文件名为1~99如何把A.txt中随机生机的5个数字替换成我事先定义的带路径的文件名呢?

例如我定义  1=D:\gequ\zuichudemengxiang.mp3
  2=D:\gequ\school.mp3
  3=D:\gequ\lige.wma
  4=D:\gequ\angela06-01.wma
  5=D:\gequ\yinxingdcb.wma
  6=D:\gequ\rgaxq.mp3
  7=D:\gequ\316515760.mp3
  8=D:\gequ\tl.mp3
......
再通过随机生成的5 7 9 8 1 换成相应的带路径的文件名
请高手指教

2007-11-7 12:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  


@echo off
for /f "delims=" %%i in ('dir/a-d/b *.mp3') do (
  set /a n+=1
  call set list%%n%%=%%i
)

:loop
set /a randomloop=%random% %% %n%+1
for %%n in (%Tmp$%) do if "%randomloop%" == "%%n" goto loop
call set Tmp$=%%Tmp$%% %randomloop%
set /a Num+=1
call echo %%list%randomloop%%%
if %Num% LSS 5 goto loop

pause




2007-11-7 12:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 7 楼』:  

参考楼上的我也写了个
@echo off
>x.txt (for /f "tokens=1*" %%a in ('^(for /f "tokens=1* delims=:" %%i in ^('findstr /n . list.txt'^) do @call set/a list^=%%random%%%%%%i^>nul^&call echo %%list%% %%j^)^|sort /r') do (set/ax+=1,y=3/x,z=1/y 2>nul&&echo %%b||goto end))

:end
pause


2007-11-7 20:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rrrrfcu3
新手上路





积分 12
发帖 5
注册 2007-11-6
状态 离线
『第 8 楼』:  

谢谢大家的帮助,7楼的测试之后好像会有重复的毛病

2007-11-13 19:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
r0gue
新手上路





积分 7
发帖 4
注册 2007-11-13
状态 离线
『第 9 楼』:  

测试了一下 的确有点小毛病的

2007-11-13 23:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: