[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样遍历文件夹用指定文件类型的指定字段重命名该文件夹?

一、基本情况介绍
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
求大湿指点迷津,如能代为完成更加感谢!!

顺便给大家介绍一下如何获取电影的imdb信息:XBMC,google之即可,不奉上链接了。
一个开源软件,因为开源,所以不能算广告吧,版主明察。

TOP

  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
复制代码

TOP

dear terse:
1、实际上是.nfo,我改了,运行后提示:
文件名、目录名或卷标语法不正确。
2、有几个文件夹名确实改了,但乱码了。可能是<title>字段有中文的缘故,能支持中文吗?
3、附上示例文件夹和nfo文件,请帮忙分析一下出错原因,谢谢!

TOP

另外,能不指定绝对路径么?比如我放在movie文件夹下,就可以工作。

TOP

bat不支持utf-8,编码问题
初九的冬天

TOP

回复 6# 1270697389 不支持?那就有点差劲了啊。命令行都支持中文啊貌似。

TOP

powershell 3.0 代碼
放到movie文件夾下
  1. $a=select-xml   "/movie"   *\*.nfo
  2. $a | ren -literal {$_.path + "\.." }  -new {$_.node.title + "(" + $_.node.year+ ")"}
复制代码

TOP

回复 8# nwm310
不明觉厉,等下试试。太简洁了吧。

TOP

回复 8# nwm310
感谢!-literal 改为-Path后,成功一半。遇到英文冒号时(非法文件名字符)卡住了。

TOP

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

TOP

返回列表