|
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
|
致精致简! |
|
2007-12-9 18:44 |
|
|
userwww
初级用户
积分 136
发帖 57
注册 2007-9-8
状态 离线
|
|
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 来自 上海
状态 离线
|
|
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 |
|