中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何从一个文件夹内随机的显示一个文件?
作者:
标题: [已结]如何从一个文件夹内随机的显示一个文件? 上一主题 | 下一主题
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『楼 主』:  [已结]如何从一个文件夹内随机的显示一个文件?

比如文件内有50个文件,我想随机的显示它们该如何做呢?

[ Last edited by HAT on 2008-12-17 at 12:37 ]

2008-12-17 12:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 2 楼』:  

呵呵!搞定了.谢谢论坛啊!
@echo off&setlocal EnableDelayedExpansion
set "Play=c:\Program Files\Windows Media Player\wmplayer.exe"
set ppath=c:\music
set/a num=%random%%%13+1
for /f "delims=" %%i in ('dir /b c:\music') do (
   set /a n+=1
   if !n! equ !num! set var=%%i
   echo !var!
)
start /min "" "%Play%" "%ppath%\%var%"

2008-12-17 12:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 3 楼』:  

这样?
@echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do (
  set /a n+=1
  set "_!n!=%%a"
)
:agn
cls
set /a "num=%random%%%%n%+1"
echo.!_%num%!
echo.&pause&goto :agn


   此帖被 +2 点积分    点击查看详情   
评分人:【 luxipeng 分数: +2  时间:2008-12-18 09:54


2008-12-17 12:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by moniuming at 2008-12-17 12:22:
这样?
[code]@echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do (
  set /a n+=1
  set "_!n!=%%a"
)
:agn
cls
set /a "num=%random%%%%n%+1"
echo.!_%num%!
ech ...

谢谢,这个正是我想要的,可是我看不懂,能给讲讲吗?比如说:
set "_!n!=%%a"
set /a "num=%random%%%%n%+1"

2008-12-17 13:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by tempuser at 2008-12-17 13:12:

谢谢,这个正是我想要的,可是我看不懂,能给讲讲吗?比如说:
set "_!n!=%%a"
set /a "num=%random%%%%n%+1"

set "_!n!=%%a"
这个"_"可以是任何非特殊字符,也可以用你的ID"tempuser",如set "tempuser!n!=%%a",这是为了给每个文件设置一个变量,好随机调用.
set /a "num=%random%%%%n%+1"
这样可能更容易看些:set /a "num=%random% %% %n%+1"
就是给"num"赋值,它的值是"随机数"除以文件总数加上1,如果不加"1"会不正确,比如100除以6的余数是0~5,这样就会比文件总数少1,这就是加1的原因.
%random%是一个随机数
%%表示取余运算
%n%是文件的总数
由于之前已经给每个文件赋值,它们的值分别为:"_1","_2","_3"等等,而"%num%"是一个随机的余数,echo !_%num%!这样就达到了随机显示的目的了.

   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-12-17 14:20


2008-12-17 13:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  

给一个2楼的参考代码:
@echo off&setlocal EnableDelayedExpansion
set "Play=c:\Program Files\Windows Media Player\wmplayer.exe"
for /r "c:\music" %%i in (*.mp3) do (
   set /a n+=1
   set "tempuser!n!=%%i"
)
set/a "num=%random%%%%n%+1"
start /min "" "%Play%" "!tempuser%num%!"


2008-12-17 13:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 7 楼』:  

谢谢,很受益!

2008-12-17 13:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 8 楼』:  

再请教一个问题,文件名是怎么过来的呢?

set /a "num=%random%%%%n%+1"
现在的num是一个数字
echo.!_%num%!
现在加了个_,要显示的文件名就显示了,难道它是由"_!n!=%%a"传过来的吗?可是它们之间的桥梁呢?

2008-12-17 14:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 9 楼』:  

试试下面的代码?
我这个菜鸟一直都是这样过来的,当遇到不明白的代码时,就去掉"echo off",然后分析,当然,有时候要在适当的地方加个"pause".相信通过下面的代码应该可以理解了吧?
:@echo off
setlocal enabledelayedexpansion
for %%a in (*.*) do (
  set /a n+=1
  set "tempuser!n!=%%a"
  echo 现在 "tempuser!n!" 对应的文件是 "%%a"
)
:agn
set /a "num=%random%%%%n%+1"
echo.!tempuser%num%!
echo.&pause&goto :agn


2008-12-17 15:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: