标题: [文件操作] 批处理怎样遍历文件夹用指定文件类型的指定字段重命名该文件夹? [打印本页]
作者: nicholasfor 时间: 2013-11-25 10:07 标题: 批处理怎样遍历文件夹用指定文件类型的指定字段重命名该文件夹?
一、基本情况介绍
1、有如下目录结构:
MOVIE
│
├─2012世界末日
│ [2012].2012.2009.Blu-ray.REMUX.H264.1080P.MKV
│ [2012].2012.2009.Blu-ray.REMUX.H264.1080P.nfo
│
├─V字仇杀队
│ V字仇杀队.nfo
│ V字仇杀队.rmvb
│
├─少年派的奇幻漂流
│ Life of Pi.rmvb
│ Life of Pi.nfo
│
└─等等……
2、MOVIE中有一大堆文件夹,以电影名命名,每个文件夹下一部电影,并有nfo文件,记录该电影的imdb信息。.nfo文件中有如下字段:
<title>少年派的奇幻漂流</title>
<originaltitle>Life of Pi</originaltitle>
<rating>6.700000</rating>
<epbookmark>0.000000</epbookmark>
<year>2012</year>
<top250>0</top250>
<votes>2439</votes>
二、问题描述
1、遍历所有电影文件夹下的nfo文件,从中读取<title>和<year>字段;
2、在<title>(<year>)的格式,重命名电影文件夹。
三、现状
有基本的命令行为bat基础,但不精通。初步想到用FOR和FINDSTR,但不知道具体怎么完成,到这一步就卡住了:
for /r %%i in (*.nfo) do FINDSTR /c:"\<title\>" %%i
求大湿指点迷津,如能代为完成更加感谢!!
作者: nicholasfor 时间: 2013-11-25 10:10
顺便给大家介绍一下如何获取电影的imdb信息:XBMC,google之即可,不奉上链接了。
一个开源软件,因为开源,所以不能算广告吧,版主明察。
作者: terse 时间: 2013-11-25 11:59
- @echo off
- set "ph=E:\MOVIE"
- if not exist "%ph%\" exit
- for %%i in ("%ph%\..") do pushd "%%~dpi"
- (for /f "delims=" %%a in ('dir /b/s/a-d "%ph%\*.nof"') do (
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in ('findstr /i "<title> <year>" "%%a"') do (
- for /f "tokens=1,2delims=<>" %%j in ("%%i") do (
- set %%j=!%%j!%%k
- )
- )
- echo ren "%%~dpa" "!title!(!year!)"
- endlocal
- ))>"%temp%\$.t"
- sort /r "%temp%\$.t" >"%temp%\$.cmd"
- pushd "%temp%\"
- call "$.cmd"
- del $.t $.cmd
- popd
- pause
复制代码
作者: nicholasfor 时间: 2013-11-25 12:32
dear terse:
1、实际上是.nfo,我改了,运行后提示:
文件名、目录名或卷标语法不正确。
2、有几个文件夹名确实改了,但乱码了。可能是<title>字段有中文的缘故,能支持中文吗?
3、附上示例文件夹和nfo文件,请帮忙分析一下出错原因,谢谢!
作者: nicholasfor 时间: 2013-11-25 13:20
另外,能不指定绝对路径么?比如我放在movie文件夹下,就可以工作。
作者: 1270697389 时间: 2013-11-25 15:52
bat不支持utf-8,编码问题
作者: nicholasfor 时间: 2013-11-25 16:08
回复 6# 1270697389 不支持?那就有点差劲了啊。命令行都支持中文啊貌似。
作者: nwm310 时间: 2013-12-1 20:44
powershell 3.0 代碼
放到movie文件夾下- $a=select-xml "/movie" *\*.nfo
- $a | ren -literal {$_.path + "\.." } -new {$_.node.title + "(" + $_.node.year+ ")"}
复制代码
作者: nicholasfor 时间: 2013-12-2 09:18
回复 8# nwm310
不明觉厉,等下试试。太简洁了吧。
作者: nicholasfor 时间: 2013-12-3 15:47
回复 8# nwm310
感谢!-literal 改为-Path后,成功一半。遇到英文冒号时(非法文件名字符)卡住了。
作者: nwm310 时间: 2013-12-4 19:18
#把半形的: 改成全形的:- $p1 = {$_.path + "\.." -replace '[][]' , '``$&' }
- $p2 = {$_.node.title + "(" + $_.node.year+ ")" -replace ':' , ':'}
-
- ( select-xml /movie *\*.nfo ) | ren -path $p1 -new $p2
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |