标题: [求助]if not exist在For中出错
[打印本页]
作者: userwww
时间: 2007-12-9 18:25
标题: [求助]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 ]
作者: 26933062
时间: 2007-12-9 18:44
试试?
:
@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
作者: userwww
时间: 2007-12-10 20:22
解决问题,谢谢!:P
作者: userwww
时间: 2007-12-14 17:11
我在二楼的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
作者: 26933062
时间: 2007-12-14 18:55
那就换个方法
:
@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 ]
作者: userwww
时间: 2007-12-14 20:25
五楼的代码在我的机子上运行没反应,我再试试看是什么原因
作者: fastslz
时间: 2007-12-14 22:58
如果歌名和歌词名字不对应尝试
*中*国*人*.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歌词和歌名同名
作者: qzwqzw
时间: 2007-12-14 23:21
感觉楼主的问题很奇怪
不知道是不是重新编辑的问题
因为从我来看
@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
作者: fastslz
时间: 2007-12-14 23:49
奇怪不能修改7楼帖子了,%newvar%*.lrc忘了加""自己改一下
作者: terse
时间: 2007-12-15 00:40
这样行吗
@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 ]
作者: 26933062
时间: 2007-12-15 00:50
到底功力深厚,佩服。