Board logo

标题: 批处理:枚举硬盘上的电影rmvb格式并生成网页 [打印本页]

作者: senffon     时间: 2006-5-11 15:59    标题: 批处理:枚举硬盘上的电影rmvb格式并生成网页

出发点是这样的,我想在电影服务器上做一个批处理,实现实时的把所有电影文件以网页形式发布出去!
环境:helix server+iis6
helix server 加载点分别为:
/movie/ = D:\class\
movie1/ =E:\class\
movie2 =F:\class\
电影目录结构:%driver":\classs\分类(”喜剧片“)\片名\01.rmvb
电影目录结构:%driver":\class\分类(”喜剧片“)\片名\海报.jpg
电影目录结构:%driver":\class\分类(”喜剧片“)\片名\说明.txt
然后我想通过批处理来生成网页,通过helix server 来发布 链接相应为:
rtsp://192.168.0.253/movie/分类/片名/01.rmvb
图片在批处理中COPY到IIS电影目录中的images\ 并更名为"%片名%.jpg"
电影简介在批处理中 copy 到IIS电影目录中的Intro\ 并更名为""片名.txt"

再或者,通过这个批处理自动生成一个MDB的数据库及ASP网页!
请高手花点时间参详一下!

目前我只是做了个简单的:
@echo off
color 9e
echo.
echo.
echo.  本程序将当前盘符下的RMVB格式电影文件整理成流媒体播放路径,包括电影名,分类!
set /p var=  回车开始生成列表文件!
@echo.
@echo.
@echo.  程序正在扫描磁盘目录请稍候!.................................................
@echo.  .............................................................................
@echo.  ..............................................
@echo ^<html^>^<head^>^<title^>网吧影视^</title^>^</head^> >rmvblist.htm
@echo ^<body^>^<center^>^<h1^>网吧电影列表^</h1^>^</center^> >>rmvblist.htm
@echo ^<table align=center bgcolor=#FFFFCC border=1 width=768^> >>rmvblist.htm
@echo ^<b^>^<tr^>^<td^>影片类型^</td^>^<td^>影片名称^</td^>^</tr^>^</b^> >>rmvblist.htm
for /f "tokens=1,2,3,4,5 delims=\" %%a in ('dir /b/s *.rmvb') do @echo ^<tr^>^<td^>%%~nc^</td^>^<td^>^<a href=rtsp://192.168.0.253/movie1/%%c/%%d/%%e^>%%~nd^</a^>^</td^>^</tr^> >>rmvblist.htm
@echo ^</table^>^</body^>^</html^> >>rmvblist.htm
@echo.
@echo. 列表文件已经生成!请按回车查看该文件!
@pause>nul
@explorer rmvblist.htm

[ Last edited by senffon on 2006-5-11 at 16:02 ]
作者: 3742668     时间: 2006-5-11 18:32
这个贴子应该对你会有点帮助。
至于剩下的生成mdb数据库我想应该是用vbs来完成,不知道你要求的数据库文件名,表名,以及各个字段的要求是什么?
作者: senffon     时间: 2006-5-13 14:18
初步我不想搞得那么复那么复杂!只要静态页面就行,有新加电影就运行一次批处理!
作者: senffon     时间: 2006-5-13 18:18    标题: 版主请看

我想生成的数据库内容如下
表名: vodurl 字段 id  img intro vname  plurl  ip1 ip2


说明:ID字段为序列字段 img为影片缩图,INTRO 为电影简介,VNAME为片名
plurl 为流媒体播放地址后半部份,IP1为网站虚拟路径,IP2为流媒体播放根路径

[ Last edited by senffon on 2006-5-13 at 21:58 ]
作者: 3742668     时间: 2006-5-13 19:45
越看越不明白了,你不是自己写了一个批处理了吗?如果你写的有什么自认为不完善的地方你可以提出来让大家帮你看看。不妨把问题说清楚,说具体一点,比如:如何添加枚举多个分区中的文件的功能?
    至于你的数据库,个人认为3个表太麻烦了,1个表足矣,代码等上mop灌完水回来帮你写。
作者: senffon     时间: 2006-5-13 21:31    标题: 生成数据库是不是很麻烦?

生成数据库是最好不过了!如果是生成数据库的话,每两天下完十部电影就运行一次批处理,然后换掉数据库就完了!这项突破实在太有意义了!以后再以不用一部一部去加电影了!一般情况下,BT下回的电影里就有海报+简介!
(哈哈,版主,我是不是太懒了!不过懒却是没有本事去想出懒办法)
这次希望版主能让我偿点甜头!以后我一定有成果出来,一定花时间帮版主处理问题贴子!

[ Last edited by senffon on 2006-5-13 at 21:57 ]
作者: senffon     时间: 2006-5-13 21:43
本来认为生成数据库+ASP网页会把问题搞复杂化!如果结果真是很麻烦就用静态页面好了!(我不想占用版主太多时间,但我看过版主的大部分贴子相信版主要实现只是时间上的问题!)
靓态页面我想实现的有
网页上有影片说明,影片缩略图预览,以及流播放链接!通个两页分开实现比较好!一页实现鼠标停留时显示图片及简介,点击提交播放地址,另一页负责网页播放!
不知道以上想法能否实现!
一直以来用传统的影视程序来做影视站,不能批量傻瓜式添加电影!总想在电影服务器终端上运行一次批处理就把影片全做成网页,但限于能力,直到我找到DOS联盟!才看到了亮光!
还希望版主在这里花费点时间!实在不好意思!

[ Last edited by senffon on 2006-5-13 at 21:45 ]
作者: 3742668     时间: 2006-5-14 17:45
代码来了,昨儿下了《我猜》看完了已经很晚了,直接就睡了,今天给你补上:
strDataName = "电影.mdb"
strTableName= "vodurl"
set objIE = Wscript.CreateObject("InternetExplorer.Application")

'显示LOGO
With objIE
    .fullscreen        = 1
    .width        = 300
    .height        = 100
    .navigate "about:blank"
    .left        = fix((.document.parentwindow.screen.availwidth-.width)/2)
    .top        = fix((.document.parentwindow.screen.availheight-.height)/2)
    .visible        = 1
end With

With objIE.Document
    .Write "<HTML><HEAD><TITLE>数据库</TITLE></HEAD>"
    .Write "<BODY SCROLL='NO'><CENTER><FONT FACE='arial black'> <HR COLOR=#DB7093>"
    .Write  "正在读取数据库,请稍侯...."
    .Write "<HR COLOR=#DB7093></FONT></CENTER></BODY></HTML>"
end With

'是否存在数据库,不存在则创建
Set fso = CreateObject("Scripting.FileSystemObject")
    If not (fso.FileExists(strDataName)) Then
        CreateDataBase
        GetFileList
    End If
    str = strHTML()

'显示数据
objIE.quit
set objIE = Nothing
set objIE = Wscript.CreateObject("InternetExplorer.Application")
With objIE
    .menubar        = 0
    .addressbar        = 0
    .toolbar        = 0
    .statusbar        = 0
    .resizable        = 0
    .width        = 800
    .height        = 600
    .navigate "about:blank"
    .left        = fix((.document.parentwindow.screen.availwidth-.width)/2)
    .top        = fix((.document.parentwindow.screen.availheight-.height)/2)
    .visible        = 1
end With


With objIE.Document
    .Write "<HTML><HEAD><TITLE>数据库</TITLE></HEAD>"
    .Write "<BODY><CENTER><FONT FACE='arial black'> <HR COLOR=#DB7093>"
    .Write "<DIV id='WriteStr'></DIV>"
    .Write "<HR COLOR=#DB7093></FONT></CENTER></BODY></HTML>"
end With
Set objDiv = objIE.Document.All.WriteStr
    objDiv.innerHTML = str

'获得全部vbs文件列表,并调用AddData添加数据到数据库
Sub GetFileList()
'Set fso = CreateObject("Scripting.FileSystemObject")
Set objDataFiles = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")

Set colFiles = objDataFiles. _
    ExecQuery("Select * from CIM_DataFile where extension = 'rmvb'")

For Each objFile in colFiles
    strName = ""
    strClass= ""
    strPath = ""
    strIntro= "暂无简介"

    set f = fso.GetFile(objFile.Name)
    strName = f.ParentFolder.Name
    strClass= f.ParentFolder.ParentFolder.Name
    strPath = f.ParentFolder.ParentFolder.ParentFolder
On Error Resume Next
    strIntro= fso.OpenTextFile(strPath & "\海报.txt").ReadAll
    AddData strName,strClass,strPath,strIntro

Next

end Sub


Sub AddData(strName,strClass,strPath,strIntro)

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

    objConnection.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strDataName
    objRecordSet.Open _
        "SELECT * FROM " & strTablename, objConnection, 3, 3

    objRecordSet.AddNew
    objRecordSet("Name") = strName & space(1)
    objRecordSet("Class")= strClass & space(1)
    objRecordSet("Path") = strPath & space(1)
    objRecordSet("Intro")= strIntro & space(1)
    objRecordSet.Update

end Sub

Sub CreateDataBase()

'创建数据库文件,不存在则创建
On Error Resume Next
CreateObject("Adox.Catalog").Create ( _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source =" & strDataName )

'建立一个新表
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open _
    "Provider= Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=" & strDataName
objConnection.Execute( "CREATE TABLE " & strTableName & _
    "(Name TEXT(20) ," & _
    "Class TEXT(20) ," & _
    "Path  TEXT(50) ," & _
    "Intro TEXT(200) )" )
end Sub

'读取数据库数据到表格中
Function strHTML()

    strHTML = "<table border='1' style='border-collapse: collapse' "  & _
        "bordercolor='#111111' width='100%' id='Table1' >"
    strHTML = strHTML & _
        "<tr><td>片名</td><td>类型</td><td>物理目录</td><td>简介</td></tr>"

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

    objConnection.Open _
        "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strDataName
    objRecordSet.Open _
        "SELECT * FROM " & strTablename, objConnection, 3, 3

    objRecordSet.MoveFirst

Do Until objRecordSet.EOF
        strHTML = strHTML & "<tr>"
for i = 1 to objrecordset.fields.count
        strHTML = strHTML & "<td>" & objrecordset.fields(i - 1) & "</td>"
next
    strHTML = strHTML & "</tr>"
    objRecordSet.MoveNext
Loop
    strHTML = strHTML & "</table>"
end Function
要保存为VBS文件的,可以枚举你硬盘上所有的rmvb文件,如果你还需要加上别的文件的话可以在GetFileList函数的查询语句中加上其他条件,由于工程量有点大(用记事本写代码真是太痛苦了),所以代码并不是很完善,不过相信了解了操作数据库的方法,你可以自己修改。

    另:
    如果做静态的话,可以考虑用bat,相信比VBS的代码要少得多。
@echo off
wmic datafile where "extension='vbs'" get name >> tmp1.tmp
type tmp1.tmp
pause
然后可以用for来依次读取tmp1.tmp到变量中,然后用set命令把变量中的字符"\"替换为"/",把需要的目录名用set提取出来,然后自己构造一下字符串写到htm文件中就行了。
作者: 3742668     时间: 2006-5-14 18:13
晕,注释有些地方不正确,因为我调试的时候是搜索的本地硬盘上所有的vbs文件,我这没rmvb文件,所以有些地方可能注释不正确。
   还有就是一部电影分上下集的情况,并未对其做出判断,不过用SQL语句查询一下就能得到正确的结果了,所以略过。
   对了,如果搞全盘搜索的话,强烈建议大家用WMIC,它比dir搜索的速度要快得多,而且更灵活。

[ Last edited by 3742668 on 2006-5-14 at 18:38 ]
作者: senffon     时间: 2006-5-14 21:37    标题: 真的好感动!虽然代码我还没有细看

不过,WMIC我是不懂哦!以前只知道有个RCMD1.05很好用!真希望版主能再抽点时间做一个完整的代码及说明,相信这个工程会为论坛带来更大的人气的!好多电影网站的管理员看到了会喜欢得发疯的!

[ Last edited by senffon on 2006-5-14 at 22:11 ]
作者: senffon     时间: 2006-5-14 22:24    标题: 后面那个做静态的好受用!果然快!看来要猛学wmic!

不知道ASP里能不能调用wmic组件?为什么到目前为止所有的电影后台都没有人开发出这种功能呢?这个貼子我决定跟进一个月时间!

[ Last edited by senffon on 2006-5-14 at 22:29 ]
作者: 3742668     时间: 2006-5-14 23:29
WMIC不是一个组件,只是一个命令行工具,应该算是来源于WMI(windows管理规范),WMI基本上无所不能,如果能在ASP里面用的话估计现在病毒漫天飞了。
    这个脚本被我自己留下来准备改造成全盘搜索用的,可以用来查查毒,当资源管理器用用。
作者: senffon     时间: 2006-5-15 00:25    标题: 估计什时候能完成?

有一点请教,能否在脚本中把物理路径转转换成服务器发布路径!这个脚本能否添加交互功能?

[ Last edited by senffon on 2006-5-15 at 00:46 ]
作者: senffon     时间: 2006-5-15 00:38    标题: 希望能看到版主对于这个脚本的更新的功能!


作者: 3742668     时间: 2006-5-15 19:26


  Quote:
有一点请教,能否在脚本中把物理路径转转换成服务器发布路径!这个脚本能否添加交互功能?

你只要在表中多加一个域,然后自己填充一下就行了,只是3,4句代码的问题。
至于交互功能,其实一开始打算写成hta的,但是似乎有点脱离了脚本的范畴,所以并没有考虑交互功能,而且你的目的只是收集电影数据到数据库,并非是专门针对数据库的操作。
作者: senffon     时间: 2006-5-22 22:04    标题: 晕,几天没有来,这个贴就沉了?

版主的脚本离我想的要求不有距离啊!不能再完善一些吗?
作者: 3742668     时间: 2006-5-23 13:13
这个脚本当然没有完全完成你所想要的功能,不过你只需要对创建数据表中的域进行添加就行了。本来以前封装(好牛b的一个词)过一个函数,可以用来创建数据表中的域,不需要一行行地添加,现在没找到了,所以在数据表这方面处理有点不灵活。
     如果你还有什么新的要求你可以讲出来,毕竟写的代码越多对自己的提高越多,我也愿意把它完善一下。