xwt620 发表于 2009-10-27 22:31:55

初学编程,想做个自动分类的脚本,希望高手能给点思路

本帖最后由 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文件

netegg 发表于 2009-10-27 23:23:18

这个光用循环不行了,要递归枚举了
看看论坛里关于按扩展名搜索文件的函数,类似

131738 发表于 2009-10-28 00:45:52

刚注册,就要有点难度的要求!到是有个搜索.exe的脚本,有时间我改改看.....

xwt620 发表于 2009-10-28 01:09:54

呵呵,确实有点难
刚开始我想做这个脚本时,以为很简单,结果我思路自己写出来后,发现好多表达式我都无法写出来
这说明我学编程的功夫还不够火候,还得继续努力学习ing:face (12):

netegg 发表于 2009-10-28 03:40:47

本帖最后由 netegg 于 2009-10-28 03:53 编辑

提取歌手名字不难
$filename = stringsplit(stringtrimright($filename,4), "-")
$filename是歌手名
$filename是专辑名
分类放置还没想出来

newx 发表于 2009-10-28 10:27:14

把你的歌名放一个上来看看,比如:xxx-xxxx.mp3
应该很容易实现

newx 发表于 2009-10-28 10:50:18

本帖最后由 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

netegg 发表于 2009-10-28 11:04:23

7# newx
稍作个建议,那个去[]似乎没什么必要,直接建文件夹应该可以了

newx 发表于 2009-10-28 11:28:54

那就把:
    $file = StringReplace($file,"[","") ;去[
    $file = StringReplace($file,"]","") ;去]
注释掉:-)

afan 发表于 2009-10-28 11:54:59

也可以这样~$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)

ZEROBOYS 发表于 2009-10-28 13:15:30

建檔規格上,或許可以參考千千靜聽...
也同newx所說的「把你的歌名放一个上来看看,比如:xxx-xxxx.mp3」 <<<最重要
這部份是成敗的關鍵,剩下就是其他人的範例去結合了...

xwt620 发表于 2009-10-29 01:22:14

感谢newx 提供的代码,已经解决了我的问题。只是执行完后,文件名都改成专辑名了,但是也没什么,总是要解压的
也很感谢afan 的代码。虽然执行完了,没什么反映,但是我估计大家都理解错了,我的那些打包文件 没有 [] 这个括号
,这也是我的错,没有说清楚,所以造成正则表达式可能有点问题。
附上截图应该很清楚了吧~

newx 发表于 2009-10-29 02:04:34

本帖最后由 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)

afan 发表于 2009-10-29 11:38:56

如果只生成歌手名文件夹,不用生成专辑名文件夹$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)

kn007 发表于 2009-10-29 15:03:25

两位高手。。。
页: [1] 2
查看完整版本: 初学编程,想做个自动分类的脚本,希望高手能给点思路