![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 21:27 |
共 48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]if not exist在For中出错 |
| 可打印版本 1,170 / 10 |
| 第1楼 userwww | 发表于 2007-12-09 18:25 |
| 初级用户 发帖 57 积分 136 | |
|
[求助]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 ] |
|
| 第2楼 26933062 | 发表于 2007-12-09 18:44 |
| 银牌会员 发帖 879 积分 2,268 | |
|
试试?
: |
|
| 第3楼 userwww | 发表于 2007-12-10 20:22 |
| 初级用户 发帖 57 积分 136 | |
|
解决问题,谢谢!:P
|
|
| 第4楼 userwww | 发表于 2007-12-14 17:11 |
| 初级用户 发帖 57 积分 136 | |
|
我在二楼的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 |
|
| 第5楼 26933062 | 发表于 2007-12-14 18:55 |
| 银牌会员 发帖 879 积分 2,268 | |
|
那就换个方法
: [ Last edited by 26933062 on 2007-12-14 at 06:58 PM ] |
|
| 第6楼 userwww | 发表于 2007-12-14 20:25 |
| 初级用户 发帖 57 积分 136 | |
|
五楼的代码在我的机子上运行没反应,我再试试看是什么原因
|
|
| 第7楼 fastslz | 发表于 2007-12-14 22:58 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
如果歌名和歌词名字不对应尝试*中*国*人*.Lrc通配符方式遍历文件
如果更模糊点遍历文件把set /a n="n+1"替换成set /a n="n+2" 即*中*人*.Lrc 也可以用这个代码ren歌词和歌名同名 |
|
| 第8楼 qzwqzw | 发表于 2007-12-14 23:21 |
| 银牌会员 发帖 636 积分 2,343 | |
|
感觉楼主的问题很奇怪
不知道是不是重新编辑的问题 因为从我来看 @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 |
|
| 第9楼 fastslz | 发表于 2007-12-14 23:49 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
奇怪不能修改7楼帖子了,%newvar%*.lrc忘了加""自己改一下
|
|
| 第10楼 terse | 发表于 2007-12-15 00:40 |
| 银牌会员 发帖 946 积分 2,404 | |
|
这样行吗
发后才知道有了 [ Last edited by terse on 2007-12-15 at 12:42 AM ] |
|
| 第11楼 26933062 | 发表于 2007-12-15 00:50 |
| 银牌会员 发帖 879 积分 2,268 | |
|
到底功力深厚,佩服。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |