初学编程,想做个自动分类的脚本,希望高手能给点思路
本帖最后由 xwt620 于 2009-10-29 01:23 编辑我有个一些打包的RAR文件,都是以 [歌手] - [专辑].rar命名的,歌手名字有中文的也有英文的
我现在想自己做个自动分类的脚本,让电脑自动创建[歌手]的文件夹,然后把和[歌手]名字一样的RAR文件移动到这个[歌手]文件夹中,
因为有的歌手不止1张专辑,这个地方是不是要做重复动作?
我自己的思路:(可能不太理想)
do
提取[歌手]到变量$SingerName;这一步还不会做
If Not FileExists ($SingerName) Then;没有歌手文件夹则创建
DirCreate ( $SingerName)
Endif
do
将相同歌手的RAR文件移动到这个文件夹中;这一步也不会做
until 没有相同歌手的RAR文件;直到这个脚本应该怎么写啊?
until 直到没有RAR文件 这个光用循环不行了,要递归枚举了
看看论坛里关于按扩展名搜索文件的函数,类似 刚注册,就要有点难度的要求!到是有个搜索.exe的脚本,有时间我改改看..... 呵呵,确实有点难
刚开始我想做这个脚本时,以为很简单,结果我思路自己写出来后,发现好多表达式我都无法写出来
这说明我学编程的功夫还不够火候,还得继续努力学习ing:face (12): 本帖最后由 netegg 于 2009-10-28 03:53 编辑
提取歌手名字不难
$filename = stringsplit(stringtrimright($filename,4), "-")
$filename是歌手名
$filename是专辑名
分类放置还没想出来 把你的歌名放一个上来看看,比如:xxx-xxxx.mp3
应该很容易实现 本帖最后由 newx 于 2009-10-28 11:22 编辑
给你个代码,没试过,大概就是这样了:
; 显示当前目录中所有文件的文件名
$search = FileFindFirstFile("[*]-[*].rar")
; 检查搜索是否成功
If $search = -1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
Exit
EndIf
While 1
$file = FileFindNextFile($search) ;取文件名
$fileName = $file
If @error Then ExitLoop ;直至全部移动完则退出循环
$file = StringReplace($file,"[","") ;去[
$file = StringReplace($file,"]","") ;去]
$file = StringSplit ( $file,".rar",1) ;去.rar
$file = $file ;取文件名,不包含.rar
$file = StringSplit ( $file,"-",1)
$xfile = $file ;歌手
$yfile = $file ;专辑
If FileExists ( $xfile ) = 0 Then DirCreate ( $xfile ) ;如果没歌手文件夹名,则建立以歌手为名的文件夹
If FileExists ( $xfile & "\" & $yfile ) = 0 Then DirCreate ( $xfile & "\" & $yfile ) ;如果没以专辑为名的文件夹则建立
FileMove ( $fileName , $xfile & "\" & $yfile ) ;移动文件
WEnd
7# newx
稍作个建议,那个去[]似乎没什么必要,直接建文件夹应该可以了 那就把:
$file = StringReplace($file,"[","") ;去[
$file = StringReplace($file,"]","") ;去]
注释掉:-) 也可以这样~$search = FileFindFirstFile('*.rar')
If $search = -1 Then Exit (MsgBox(48, '问题', '未找到rar文件'))
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$fN = StringRegExp($file, '\[(.*)\] - \[.*\].rar', 3)
If @error <> 0 Then ContinueLoop
FileMove($file, $fN & '\' & $file, 8 + 1)
WEnd
MsgBox(64, '完成', '已完成符合命名格式的rar文件整理')
FileClose($search) 建檔規格上,或許可以參考千千靜聽...
也同newx所說的「把你的歌名放一个上来看看,比如:xxx-xxxx.mp3」 <<<最重要
這部份是成敗的關鍵,剩下就是其他人的範例去結合了... 感谢newx 提供的代码,已经解决了我的问题。只是执行完后,文件名都改成专辑名了,但是也没什么,总是要解压的
也很感谢afan 的代码。虽然执行完了,没什么反映,但是我估计大家都理解错了,我的那些打包文件 没有 [] 这个括号
,这也是我的错,没有说清楚,所以造成正则表达式可能有点问题。
附上截图应该很清楚了吧~
本帖最后由 newx 于 2009-10-29 02:08 编辑
$search = FileFindFirstFile('*-*.zip')
If $search = -1 Then Exit (MsgBox(48, '问题', '未找到 歌手-专辑.rar 文件'))
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$fN = StringRegExp($file, '(.*)-(.*).zip', 3)
If @error <> 0 Then ContinueLoop
FileMove($file, $fN & '\' & $fN & '\', 9)
WEnd
MsgBox(64, '完成', '已完成符合命名格式的rar文件整理')
FileClose($search)
如果只生成歌手名文件夹,不用生成专辑名文件夹$search = FileFindFirstFile('* - *.zip')
If $search = -1 Then Exit (MsgBox(48, '问题', '未找到符合条件的zip文件'))
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$fN = StringRegExp($file, '(.*) - .*.zip', 3)
If @error <> 0 Then ContinueLoop
FileMove($file, $fN & '\' & $file, 8 + 1)
WEnd
MsgBox(64, '完成', '已完成符合命名格式的zip文件整理')
FileClose($search) 两位高手。。。
页:
[1]
2