中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批处理for /r遇到的问题:如何全盘分区遍历mp3文件
作者:
标题: [求助]批处理for /r遇到的问题:如何全盘分区遍历mp3文件 上一主题 | 下一主题
slx8528
初级用户




积分 38
发帖 39
注册 2009-1-31
状态 离线
『楼 主』:  [求助]批处理for /r遇到的问题:如何全盘分区遍历mp3文件

我用for /r搜索硬盘所有分区的mp3文件,出现“不能有d”,set命令和for命令不是很好,看看哪里错了,应该怎么写?谢谢!
代码如下:
@echo off
set var=c d e f
for /r %var% %%i in (*.mp3) do echo %%i
pause

[ Last edited by slx8528 on 2009-3-18 at 02:02 ]

2009-3-18 00:52
查看资料  发送邮件  发短消息 网志  OICQ (623886257)  编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 2 楼』:  


@echo off
for %%a in (c d e f) do (
  if exist %%a:\ (
    cd/d %%a:\
    for /r %%b in ("*.mp3") do echo/%%~fb >>c:\a.txt
))


(RE:4楼)
在 cd /? 和 for /? 的信息中有详细说明。

cd /d 就是改变当前的驱动器和目录(cd /d e:\test 相当于 e: 和 cd test 两行命令的组合),由于没有文件夹,以上句子可以把 cd/d %%a:\ 换成 %%a:

另外,可以用 pushd 命令使 %%a: 成为当前目录,并且可以用 popd 来取消 pushd 的操作,还原原来目录:

@echo off
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist %%a:\ (
    pushd %%a:\
    for /r %%b in ("*.mp3") do (
      popd
      echo/%%~fb >>a.txt
)))

看到好处?就是创建的文本不需要加入路径(在与批处理相同目录下生成)。

在 for 语句中:

%%~i         - 删除 %%i 中的所有引号
%%~fi        - 将 %%i 扩充到一个完全合格的路径名
%%~di        - 仅将 %%i 扩充到一个驱动器号
%%~pi        - 仅将 %%i 扩充到一个路径
%%~ni        - 仅将 %%i 扩充到一个文件名
%%~xi        - 仅将 %%i 扩充到一个文件扩展名
%%~si        - 扩充的路径只含有短名
%%~ai        - 将 %%i 扩充到文件的文件属性
%%~ti        - 将 %%i 扩充到文件的日期/时间
%%~zi        - 将 %%i 扩充到文件的大小
%%~dpi       - 仅将 %%i 扩充到一个驱动器号和路径
%%~nxi       - 仅将 %%i 扩充到一个文件名和扩展名
%%~fsi       - 仅将 %%i 扩充到一个带有短名的完整路径名


例如,可以用 echo.%%~nxb 只获取MP3文件名和扩展名,用 %%~zb 来检测MP3文件的大小等。

[ Last edited by newxso on 2009-3-18 at 08:05 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 slx8528 分数: +2  时间:2009-3-18 02:20


2009-3-18 01:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 3 楼』:  

for %%a in (c d e f) do (call :sub %%a)
goto :eof
:sub
for /r %1:\ %%b in (*.mp3) do echo.%%b

   此帖被 +1 点积分    点击查看详情   
评分人:【 slx8528 分数: +1  时间:2009-3-18 02:21




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-3-18 01:28
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
slx8528
初级用户




积分 38
发帖 39
注册 2009-1-31
状态 离线
『第 4 楼』:  

是双层循环,我测试一下,很好!
麻烦你能能帮我大概解释一下,好吗?尤其是:cd/d %%a:\那一点,更改目录cd/d不大懂的,还有:echo/%%~fb,
           谢谢!

2009-3-18 02:18
查看资料  发送邮件  发短消息 网志  OICQ (623886257)  编辑帖子  回复  引用回复
slx8528
初级用户




积分 38
发帖 39
注册 2009-1-31
状态 离线
『第 5 楼』:  

是双层循环,我测试一下,很好!
麻烦你能能帮我大概解释一下,好吗?尤其是:cd/d %%a:\那一点,更改目录cd/d不大懂的,还有:echo/%%~fb,
           谢谢!

2009-3-18 02:19
查看资料  发送邮件  发短消息 网志  OICQ (623886257)  编辑帖子  回复  引用回复
zerayro
新手上路





积分 10
发帖 7
注册 2009-4-4
状态 离线
『第 6 楼』:  

学习了,for这块还不是太明白呢

2009-4-5 05:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: