Hey@All
Habe ein Problem mit meinem Skript, denn es gibt einen "Error allocating memory." Fehler aus.
Ich möchte den Titel und den Artist einfach nur bearbeitet einfügen.
Hier mein Skript:
Spoiler anzeigen
#include <ID3.au3>
#include <File.au3>
$title="ID3 Fast Runner"
$folder=FileSelectFolder("Please select folder...","::{20D04FE0-3AEA-1069-A2D8-08002B30309D}",2)
$Files=_GetFileList($folder,"*.mp3")
;$syntax="<artist>*-*<title>"
;--> * means "", " ", " ", " ", ...
_ArrayDisplay($Files)
For $i=1 To UBound($Files)-1
_ID3ReadTag($Files[$i],0,-1,2)
$title=_ID3GetTagField("TIT2")
$artist=_ID3GetTagField("TPE1")
$name=StringSplit($Files[$i],"\")
$name=$name[UBound($name)-1]
If StringRegExp($name,"(.+)-(.+)")=1 Then
$temp=StringSplit($name,"-")
$CorArtist=""
$CorTitle=""
If Not @error Then
$CorTitle=$temp[2]
$CorTitle=_ReturnCorrectName($title)
$CorArtist=$temp[1]
$CorArtist=_ReturnCorrectName($artist)
EndIf
EndIf
_ID3SetTagField("COMM","tags changed by "&$title)
If $CorTitle<>"" Then
;MsgBox(0,$Files[$i],$title&$CorTitle)
_ID3SetTagField("TIT2",$CorTitle)
ConsoleWrite($CorTitle&"--")
EndIf
If $CorArtist<>"" Then
;MsgBox(0,$Files[$i],$artist&$CorArtist)
_ID3SetTagField("TPE1",$CorArtist)
ConsoleWrite($CorArtist&@CRLF)
EndIf
_ID3WriteTag($Files[$i])
;_ID3DeleteFiles()
Next
MsgBox(0,$title,"Finished.")
Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
Local $N_DIRCOUNT = 0
Local $N_FILE
Local $N_SEARCH
Local $N_TFILE
Local $N_OFILE
Local $T_FILENAMES
Local $T_FILECOUNT
Local $T_DIRCOUNT = 1
; check Filemask \ for empty File-Array by GetDirOnly
If $T_MASK = "n" Then $T_MASK = "*.no"
; remove the end \ If specified
If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
$N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
; Exit if base dir doesn't exists
If Not FileExists($T_DIR) Then Return 0
; keep on looping until all directories are scanned
While $T_DIRCOUNT > $N_DIRCOUNT
$N_DIRCOUNT = $N_DIRCOUNT + 1
; find all subdirs in this directory and save them in a array
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
$T_DIRCOUNT = $T_DIRCOUNT + 1
$N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
EndIf
Wend
FileClose($N_SEARCH) ; find all Files that mtach the MASK
$N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
If $N_SEARCH = -1 Then ContinueLoop
While 1
$N_FILE = FileFindNextFile($N_SEARCH)
If @error Then ExitLoop
; skip these references
If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
$N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
; if Directory than add to the list of directories to be processed
If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
$T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
$T_FILECOUNT = $T_FILECOUNT + 1
;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
EndIf
Wend
FileClose($N_SEARCH)
Wend
If $DIR_ONLY = 0 Then
$T_FILENAMES = StringTrimRight($T_FILENAMES,1)
$N_OFILE = StringSplit($T_FILENAMES,@CR)
Return( $N_OFILE )
Else
ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
$N_DIRNAMES[0] = $N_DIRCOUNT
Return $N_DIRNAMES
EndIf
EndFunc ;==>_GetFileList
Func _StringToArray($string)
$z=StringLen($string)
If $z=0 Then
Dim $array[1]
Else
Dim $array[$z]
For $i=1 To $z
$array[$i-1]=StringTrimRight($string,$z-$i)
$array[$i-1]=StringTrimLeft($array[$i-1],$i-1)
Next
EndIf
Return $array
EndFunc
Func _ReturnCorrectName($v)
$array=_StringToArray($v)
$last=-1
$last2=-1
For $i=1 To UBound($array)-1
If $array[$i]="" Then
$last=$i
Else
$last2=$i
ExitLoop
EndIf
Next
If $last<$last2 And $last>-1 And $last2>-1 Then
For $i=1 To $last
_ArrayDelete($array,$i)
Next
EndIf
;_ArrayDelete($array,0)
;_ArrayDisplay($array,"ReturnCorrectname")
Return _ArrayToString($array,"")
EndFunc
Die ID3-UDF gibst hier: http://www.autoitscript.com/forum/index.php?showtopic=43950
MfG AntiSpeed