Board logo

标题: [文件操作] 批处理怎样遍历文件夹用指定文件类型的指定字段重命名该文件夹? [打印本页]

作者: 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

  1. @echo off
  2. set "ph=E:\MOVIE"
  3. if not exist "%ph%\" exit
  4. for %%i in ("%ph%\..") do pushd "%%~dpi"
  5. (for /f "delims=" %%a in ('dir /b/s/a-d "%ph%\*.nof"') do (
  6.     setlocal enabledelayedexpansion
  7.     for /f "tokens=*" %%i in ('findstr /i "<title> <year>" "%%a"') do (
  8.         for /f "tokens=1,2delims=<>" %%j in ("%%i") do (
  9.             set %%j=!%%j!%%k
  10.         )
  11.     )
  12.     echo ren "%%~dpa"  "!title!(!year!)"
  13.     endlocal
  14. ))>"%temp%\$.t"
  15. sort /r "%temp%\$.t" >"%temp%\$.cmd"
  16. pushd "%temp%\"
  17. call "$.cmd"
  18. del $.t $.cmd
  19. popd
  20. 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文件夾下
  1. $a=select-xml   "/movie"   *\*.nfo
  2. $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

#把半形的: 改成全形的:
  1. $p1 = {$_.path + "\.."   -replace  '[][]' , '``$&'  }
  2. $p2 = {$_.node.title + "(" + $_.node.year+ ")" -replace ':' , ':'}
  3. ( select-xml  /movie  *\*.nfo ) | ren -path $p1  -new $p2
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2