中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]if not exist在For中出错 上一主题 | 下一主题
userwww
初级用户





积分 136
发帖 57
注册 2007-9-8
状态 离线
『楼 主』:  [求助]if not exist在For中出错

歌名.Txt是一个不带扩展名的歌名库,我想找出当前目录下(包括子目录)的没有对应的歌词并生成在 文本.txt 中,但执行下列P 后,得出的结果与无 @if not exist %%a(红色那段)所得的结果一样 请指教


for /f %%i in (歌名.txt) do (
       for /f %%a in ('dir/s/b "%%i.lrc"') do (
             @if not exist %%a @echo %%i>>文本.txt
)
)


新问题是二楼的P会忽略空格,请教大家

[ Last edited by userwww on 2007-12-14 at 05:14 PM ]

2007-12-9 18:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  

试试?
:
@echo off&setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir/b/s/a-d *.lrc') do (
  set num=%%~na
  set num=!num: =!
  set !num!=a
)
for /f "delims=" %%i in (歌名.txt) do (
  set var=%%i
  set var=!var: =!
  if not defined !var! echo %%i
)
pause


   此帖被 +2 点积分    点击查看详情   
评分人:【 userwww 分数: +2  时间:2007-12-10 20:23




致精致简!
2007-12-9 18:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
userwww
初级用户





积分 136
发帖 57
注册 2007-9-8
状态 离线
『第 3 楼』:  

解决问题,谢谢!:P

2007-12-10 20:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
userwww
初级用户





积分 136
发帖 57
注册 2007-9-8
状态 离线
『第 4 楼』:  

我在二楼的P上加了红色的那部分,现在的问题,比如:有

中国人.MP3
中  国人.Lrc

它会忽略空格,认为两者的文件名为一样的,我在*.lrc上加了双引号也不行,请教大家:


@echo off&setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('dir/b/s/a-d *.lrc') do (
  set num=%%~na
  set num=!num: =!
  set !num!=a
)
for /f "delims=" %%i in (歌名.txt) do (
  set var=%%i
  set var=!var: =!
  if not defined !var! echo %%i>>文本.txt
)
pause

2007-12-14 17:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

那就换个方法
:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (歌名.txt) do (
   set var=
   for /r . %%a in (.) do if exist "%%a%%i.lrc" set var=y
   if not defined var echo %%i
)
pause
[ Last edited by 26933062 on 2007-12-14 at 06:58 PM ]



致精致简!
2007-12-14 18:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
userwww
初级用户





积分 136
发帖 57
注册 2007-9-8
状态 离线
『第 6 楼』:  

五楼的代码在我的机子上运行没反应,我再试试看是什么原因

2007-12-14 20:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


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

如果歌名和歌词名字不对应尝试*中*国*人*.Lrc通配符方式遍历文件
@echo off
for /f "delims=" %%i in (歌名.txt) do call :slz "%%i"
pause

:slz
setlocal enabledelayedexpansion
set varnew=
set var=%~1
if not defined var goto:eof

:slz1
set "var0=!var:~%n%,1!"
if "%var0%" == "" goto end
set /a n="n+1"
call set newvar=%newvar%*%var0%
goto slz1

:end
for /f "delims=" %%a in ('dir/b/s/a-d %newvar%*.lrc 2^>nul') do echo %%a>>文本.txt
endlocal
goto:eof
如果更模糊点遍历文件把set /a n="n+1"替换成set /a n="n+2" 即*中*人*.Lrc

也可以用这个代码ren歌词和歌名同名



第一高手    第二高手

2007-12-14 22:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 8 楼』:  

感觉楼主的问题很奇怪
不知道是不是重新编辑的问题
因为从我来看
@if not exist 纯属画蛇添足了

分析:
第二句for已经针对每个歌名查找了对应歌词的存在
如果能执行到第二句for之内
则说明对应歌名的歌词文件必然存在
那么再加if not exist的判断
就只能使后面的echo始终无法执行
最后得到一个空结果

为此我用你的代码进行了简单的测试
使用if not exist得到空结果,与不使用if not exist并不一致
所以,你的两层for的嵌套用法本就是错误的

实际上,一句话就可以解决问题:

for /f "delims=" %%i in (歌名.txt) do dir /a/s/b "%%i.lrc" || echo %%i >> 文本.txt

也可以在命令行执行:
for /f "delims=" %i in (歌名.txt) do dir /a/s/b "%i.lrc" || echo %i >> 文本.txt

2007-12-14 23:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


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

奇怪不能修改7楼帖子了,%newvar%*.lrc忘了加""自己改一下



第一高手    第二高手

2007-12-14 23:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 10 楼』:  

这样行吗
@echo off
for /f "delims=" %%i in (歌名.txt) do (
dir /a/b/s %%i.lrc>nul 2>nul ||echo.%%i>>11.txt
)
pause
发后才知道有了

[ Last edited by terse on 2007-12-15 at 12:42 AM ]



简单!简单!再简单!
2007-12-15 00:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 11 楼』:  

到底功力深厚,佩服。



致精致简!
2007-12-15 00:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: