标题: [文件操作] [已解决] 批处理怎样根据文本内容查找对应图片路径? [打印本页]
作者: daohe 时间: 2011-1-12 15:53 标题: [已解决] 批处理怎样根据文本内容查找对应图片路径?
a.txt内容:
d-d
d-e
d-f
D:/images/picture/文件夹包含(图片文件名均为以下形式)
D:/images/picture/d-d.jpg
D:/images/picture/a/d-d_01.jpg
D:/images/picture/b/d-d_02.jpg
D:/images/picture/c/e/d-f.jpg
D:/images/picture/g/d/d-f_01.jpg
D:/images/picture/h/e/d-f_02.jpg
D:/images/picture/i/d-f_03.jpg
求此批处理 ,查找图片名含a.txt文本里每一行字符串的图片,多张图片的话用逗号隔开, 得到b.txt文件内容
2011-01-14 问题更新: 仅查找图片名带下划线 " _ " 的图片.不带 " _ " 的不要列出来
b.txt(格式为: 每行开始为a.txt内容, 逗号后面为寻找的文件包括路径,找不到该文件标注找不到)
d-d,a/d-d_01.jpg,b/d-d_02.jpg
d-e,找不到该文件
d-f,g/d/d-f_01.jpg,h/e/d-f_02.jpg,i/d-f_03.jpg
需要考虑效率问题, 图片可能有几千到几万张
[ 本帖最后由 daohe 于 2011-1-14 20:23 编辑 ]
作者: hucuibai 时间: 2011-1-12 17:17
- @echo off
- for /f %%i in (a.txt) do (for /r e:/images/picture %%a in (%%i**.jpg) do echo %%i %%a>>b.txt)
- pause
复制代码
作者: hanyeguxing 时间: 2011-1-12 17:24
- @echo off&setlocal enabledelayedexpansion
- set "r=D:/images/picture"
- :r
- if not "!r:~%n%,1!"=="" (
- set/a n+=1
- goto:r
- )
- set/a n+=1
- (for /r "%r%" %%a in (*.jpg) do (
- set a=%%a
- echo !a:~%n%!
- ))>b.txt
- (for /f "delims=" %%a in (a.txt) do (
- echo %%a,
- findstr /i /c:"%%a" b.txt||echo 找不到该文件
- ))>temp
- (for /f "delims=" %%a in (temp) do (
- set a=%%a
- if "!a:~-1!"=="," (
- if defined b echo/
- set/p"=%%a"<nul
- ) else (
- set/p"=%%a,"<nul
- )
- set b==
- ))>b.txt
- del temp
复制代码
作者: daohe 时间: 2011-1-14 16:02
感谢二楼, 可以列出文件地址,但是得不到我需要的b.txt文本格式.
原帖由 hucuibai 于 2011-1-12 17:17 发表
@echo off
for /f %%i in (a.txt) do (for /r e:/images/picture %%a in (%%i**.jpg) do echo %%i %%a>>b.txt)
pause
作者: daohe 时间: 2011-1-14 16:06
感谢 寒夜孤星
你的代码是可以的.非常棒.太感谢了.
但是我的需求漏了一点,
仅查找图片名带下划线 " _ " 的图片.不带 " _ " 的不要列出来
原帖由 hanyeguxing 于 2011-1-12 17:24 发表
@echo off&setlocal enabledelayedexpansion
set "r=D:/images/picture"
:r
if not "!r:~%n%,1!"=="" (
set/a n+=1
goto:r
)
set/a n+=1
(for /r "%r%" %%a in (*.jpg) do (
set a=%%a
echo !a:~%n%!
...
[ 本帖最后由 daohe 于 2011-1-14 16:13 编辑 ]
作者: hanyeguxing 时间: 2011-1-14 16:47
- @echo off&setlocal enabledelayedexpansion
- set "r=D:\images\picture\"
- (for /f "delims=" %%a in ('dir /b/s/a-d "%r%*.jpg"') do (
- set a=%%~na&set b=%%a
- set a=!a:_=!
- if not "!a!"=="%%~na" echo !b:%r%=!
- ))>b.txt
- (for /f "delims=" %%a in (a.txt) do (
- echo %%a,
- findstr /i /c:"%%a" b.txt||echo 找不到该文件
- ))>temp
- (for /f "delims=" %%a in (temp) do (
- set a=%%a
- if "!a:~-1!"=="," (
- set d=
- if defined c echo/
- if defined d set/p"=,"<nul
- ) else (
- set d==
- )
- set/p"=%%a"<nul
- set c==
- ))>b.txt
- del temp
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-14 20:11 编辑 ]
作者: 随风 时间: 2011-1-14 16:56
- @echo off
- (for /f "delims=" %%a in ('dir/b/s "D:\images\picture\*.jpg"^|findstr /i "_"') do (
- echo %%a
- ))>tem
- findstr /ig:a.txt tem>tem.txt
- start "" "tem.txt"
- del /q tem
复制代码
作者: daohe 时间: 2011-1-14 19:08
真不好意思, 本批处理出不来结果.
原帖由 hanyeguxing 于 2011-1-14 16:47 发表
@echo off&setlocal enabledelayedexpansion
set "r=D:\images\picture\"
(for /f "delims=" %%a in ('dir /b/s/a-d "%r%*.jpg"^|find "_"') do (
set a=%%a
echo !a:%r%=!
)))>b.txt
(for /f ...
作者: daohe 时间: 2011-1-14 19:09
真不好意思,本帖出来的结果不是很符合b.txt的格式要求
原帖由 随风 于 2011-1-14 16:56 发表
@echo off
(for /f "delims=" %%a in ('dir/b/s "D:\images\picture\*.jpg"^|findstr /i "_"') do (
echo %%a
))>tem
findstr /ig:a.txt tem>tem.txt
start "" "tem.txt"
del /q tem
作者: hanyeguxing 时间: 2011-1-14 19:46 标题: 回复 8楼 的帖子
第一个 for 里多打了一个 )
已经修改
[ 本帖最后由 hanyeguxing 于 2011-1-14 20:09 编辑 ]
作者: broly 时间: 2011-1-14 20:09
如果文件数量太多,不建议用findstr- @echo off&setlocal enabledelayedexpansion
- set "PicPath=D:\images\picture"
- for /f "delims=" %%i in (a.txt) do (
- set line=
- for /f "delims=" %%j in ('dir /b/s %PicPath%\*%%i_*.jpg 2^>nul') do (
- set "tmp=%%~fj"
- set "tmp=!tmp:%PicPath%=!"
- set "line=!line!,!tmp!"
- )
- if defined line (>>b.txt echo %%i!line!) else (>>b.txt echo %%i,找不到该文件)
- )
- pause
复制代码
作者: daohe 时间: 2011-1-14 20:22 标题: 回复 10楼 的帖子
感谢 寒夜孤星的杰作!
作者: daohe 时间: 2011-1-14 20:23 标题: 回复 11楼 的帖子
感谢 Broly 的杰作.
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |