中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [解决]音乐列表程序,遇见有空格的歌曲文件名出错
作者:
标题: [解决]音乐列表程序,遇见有空格的歌曲文件名出错 上一主题 | 下一主题
ehejia
新手上路





积分 16
发帖 7
注册 2007-4-5
状态 离线
『楼 主』:  [解决]音乐列表程序,遇见有空格的歌曲文件名出错

我写的一个关于服务器音乐列表更新程序 但是遇见有空格的文件名就会出错
代码如下:
@ echo off


set mp3path=d:\mp3
set mp3serverpath=\\gameserver\mp3
set mp3listname=music.m3u
set mp3tempname=temp.log


if exist %mp3path%\%mp3listname% del %mp3path%\%mp3listname%
if exist %mp3path%\%mp3tempname% del %mp3path%\%mp3tempname%
cd /d %mp3path%


dir /b/s *.mp3 >>%mp3path%\%mp3tempname%
dir /b/s *.wma >>%mp3path%\%mp3tempname%


setlocal enabledelayedexpansion
for /f %%i in (%mp3path%\%mp3tempname%) do (
set var=%%i
set "var=!var:%mp3path%=%mp3serverpath%!"
echo !var! >> %mp3path%\%mp3listname%
)

del %mp3path%\%mp3tempname%

exit
这个就是没有空格文件名做的出列表
\\gameserver\mp3\1月\wheneverwherever.wma
\\gameserver\mp3\1月\有没有人告诉你.wma

这个样子就是有空格文件名出错的样子
\\gameserver\mp3\1月\whenever
\\gameserver\mp3\1月\有没有人告诉你.wma

[ Last edited by ehejia on 2008-1-13 at 10:40 AM ]

2008-1-5 03:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

路径两边加双引号。

2008-1-5 03:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ehejia
新手上路





积分 16
发帖 7
注册 2007-4-5
状态 离线
『第 3 楼』:  

请教一下双引号加哪里

这个程序是用DIR命令列出本地硬盘的音乐路径\文件名 用FOR 循环读取每一行然后用
set替换的
但是有遇见带空格的文件名就会跳过空格后面那一段
请问一下用FOR读取出来的变量怎么加上双引号?

[ Last edited by ehejia on 2008-1-5 at 03:31 AM ]

2008-1-5 03:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





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

整个路径首尾加" 双引号。
就是一般没有变量都特指某个文件的话,也没有空白间隔的话,可以不加。

可是变量的话,在最前面的%前面加上" 在最后面的%加上" (对于你这代码来说~)

%mp3path%\%mp3tempname% 变为
"%mp3path%\%mp3tempname%"
注意的是,双引号必须是英文标点下输入。中文标点视为中文字。因为电脑是外国造的,当然是以E文为准了~

2008-1-5 10:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ehejia
新手上路





积分 16
发帖 7
注册 2007-4-5
状态 离线
『第 5 楼』:  

很抱歉 这几天没时间上网现在才来
"%mp3path%\%mp3tempname%"在DOS里是可以识别的 我的程序出错是出在用FOR语句读取文件名的时候 遇见有空格的文件名 空格后面那一半就会丢失。。

这个是我生成的临时文件
D:\mp3\Through The Years And Far Away.mp3
D:\mp3\隐形的翅膀.wma

可以看出 在这里的时候是没有问题的 列表就是替换的时候用FOR语句读取temp文件
我把回显打开看了一下就在SET的时候空格后面的名字就不见了 不清楚是不是ROF语句会跳过空格
\\192.168.1.6\mp3\Through
\\192.168.1.6\mp3\隐形的翅膀.wma

这个是转换后的文件名
我试过加上引号 %%i上加引号是程序会错误
路径系统是没有错误的加与不加也没有多大的关系


我把回显打开看了 也就是这句的时候已经把空格后的名字给丢掉了
for /f %%i in (%mp3path%\%mp3tempname%) do (
set var=%%i

set var=%%i 在Shell 里就变成 set var=Through
也就是这里的时候用FOR语句读取出来就已经没空格后的文件名了
我在set var="%%i" 加上引号在SHELL里就变成
set var="Through"


请问下是FOR语句会跳过空格后的内容吗

[ Last edited by ehejia on 2008-1-12 at 11:17 PM ]

2008-1-12 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

for /f "delins=*" %%i in (%mp3path%\%mp3tempname%) do ......

   此帖被 +1 点积分    点击查看详情   
评分人:【 ehejia 分数: +1  时间:2008-1-13 10:40




第一高手    第二高手

2008-1-12 23:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



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

pushd d:\mp3 >D:\mp3\music.m3u
for /f "tokens=2* delims=\" %%a in ('dir /b /s *.mp3;*.wma') do echo \\gameserver\mp3\%%b >>D:\mp3\music.m3u

   此帖被 +1 点积分    点击查看详情   
评分人:【 ehejia 分数: +1  时间:2008-1-13 10:40


2008-1-13 03:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ehejia
新手上路





积分 16
发帖 7
注册 2007-4-5
状态 离线
『第 8 楼』:  

感谢大家 好用了,原来是FOR语句我没有加参数 导致空格后面的名字自动被忽略。。

[ Last edited by ehejia on 2008-1-13 at 10:41 AM ]

2008-1-13 10:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: