2 Beiträge wurden in ein existierendes Thema verschoben: Anfängerschwierigkeiten
icke bitte, falls du noch in der community bist
Hi. Schick ich dir gern per Direktnachricht.
Ich mache es mal einfach und stelle den Quellcode von meiner Erweiterung hier rein.
Er ist noch nicht zu 100% perfekt, aber nutzbar.
;-------------------------------------------------------------------------------
; TonUINO SDcard Manager
; Manage your SD card for your TonUINO
;-------------------------------------------------------------------------------
; AutoHotkey Version: 1.1.x
; Author: Benedikt Schneyer
; Modifier: Argy
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance force ; Only one instance at a time
#NoTrayIcon
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
;; ***************
;; global settings
;; ***************
VERSION := "0.12.0"
AUDIOPROMPT := "Wähle einen Ordner aus"
SDPROMPT := "Wähle eine SD-Karte aus"
COPYLOG := "copylog.txt"
;; ***********
;; init config
;; ***********
iniPath := "settings.ini"
IniRead, SDPath, % iniPath, % "User", % "SDpath", % SDPROMPT
IniRead, AudioPath, % iniPath, % "User", % "Audiopath", % AUDIOPROMPT
IniRead, AsAdmin, % iniPath, % "User", % "AsAdmin", 0
IniRead, WithFilename, % iniPath, % "User", % "WithFilename", 1
IniRead, SmartRename, % iniPath, % "User", % "SmartRename", 1
IniRead, Recursive, % iniPath, % "User", % "Recursive", 0
;; ************
;; run as admin
;; ************
if (AsAdmin && not A_IsAdmin)
{
Run *RunAs "%A_ScriptFullPath%"
ExitApp
}
; MsgBox, % id3read("F:\temp\Tonuino\Auf der Baustelle\01 1.mp3","Artist")
;; ***
;; GUI
;; ***
Gui, New, , TonUINO SD Card manager
Gui, Add, Edit, w300 vSDPathEdit disabled, % SDpath
Gui, Add, Button, gselectSDcard X+m, SD-Karte wählen
Gui, Add, Progress, w200 x10 h20 cGreen vSDSpaceProgress BackgroundAAAAAA,
Gui, Add, Text, x+m yp+5 vSDSpace w300, NA
Gui, Add, Tab3, w550 x10 y+10, SD-Karte prüfen|Dateien kopieren|Einstellungen
Gui, Add, Text, vCheck X+10 w530, SD-Karte ist ok
Gui, Add, Edit, vErrors r10 w530
Gui, Add, Button, vRecheck gRecheck, Test wiederholen
Gui, Add, Text, vErrors2, Gefundene Fehler sollten behoben werden!`n`nTipp:`n1. Es dürfen nur Ordner im Hauptverzeichnis verhanden sein und keine Dateien!`n2. Die Ordner dürfen nur mp3 und advert heißen oder eine zweistellige Zahl haben. (Bsp. 01,02,03...)`n3. Wenn die Nummerierung nicht durchgängig ist, werden die fehlenden Ordner ergänzt.`n Erst dann kann der/die Ordner genutzt werden um Dateien hinein zu kopieren.
Gui, Add, Text, gZaehlen vZaehlen,
Gui, Add, Button, vFormat gFormat, Karte formatieren (mp3 und advert behalten)
Gui, Add, Button, vFormat2 gFormat2, Karte vollständig formatieren
Gui, Add, Text, , Auf "Dateien kopieren" klicken um neue Daten auf die SD-Karte aufzuspielen
Gui, Tab, Dateien
Gui, Add, Edit, w420 vAudioPathEdit section x+5 y+5 disabled -Multi R1, % AudioPath
Gui, Add, Button, gselectAudio X+m, Ordner auswählen
Gui, Add, Text, vNextFolder Xs+5, Kopieren nach:
Gui, Add, DropDownList, X+m Yp-3 vTargetFolder AltSubmit, Neu||01|02
Gui, Font, bold
Gui, Add, Text,X20 Y+m h30 , Um Dateien in einen vorhandenen Ordner zu kopieren bitte eine Ordnernummer auswählen
Gui, Font,
Gui, Add, Text,X20 Y+m, (Doppelklick auf eine Zeile schaltet zwischen Kopieren und Überspringen um)
Gui, Add, ListView, xs r10 w530 gLVClick AltSubmit, Modus|Dateiname|Titel|Liednummer|Pfad
LV_ModifyCol(3, "Integer")
LV_ModifyCol(4,0)
Gui, Add, Checkbox, vWithFilename checked%WithFilrename% gSaveIni Xs+5 h25, Originalname an Nummer anhängen
Gui, Add, Checkbox, vSmartRename checked%SmartRename% gSaveIni X+m h25, Smartes umbenennen (Umlaute)
Gui, Add, Checkbox, vRecursive checked%Recursive% gSaveIni X+m h25, Unterordner einbeziehen
Gui, Add, Button, vCopyAudioBut gcopyAudio X20 Y+m, Kopiervorgang starten
Gui, Tab, Einstellungen
Gui, Add, Checkbox, vAsAdmin gSaveIni checked%AsAdmin%, Als Administrator starten (Neustart erforderlich)
Gui, Add, Button, vRestart gRestart, TinoTool neu starten
Gui, Tab,
Gui, Add, Link, , <a href="https://github.com/DarthBrento/TinoTool">Projekt auf GitHub</a>
Gui, Add, Text, x+380 , % "Version: " VERSION
Gui, Add, StatusBar,, Fertig
Gui, Show, center autosize, TinoTool
OnMessage(0x0200, "WM_MOUSEMOVE")
checkSDCard(SDPath)
readFileList(AudioPath)
targetFolder := 1
return
/*
######## ## ## ######## ###### ######## ## ## ########
## ## ## ## ## ## ## ### ## ## ##
## ## ## ## ## ## #### ## ## ##
###### ### ###### ## ###### ## ## ## ## ##
## ## ## ## ## ## ## #### ## ##
## ## ## ## ## ## ## ## ### ## ##
######## ## ## ######## ###### ######## ## ## ########
*/
selectSDcard:
FileSelectFolder, SDPath , ::{20d04fe0-3aea-1069-a2d8-08002b30309d},2, Wähle eine SD-Karte aus
if (SDPath = "")
SDPath := SDPROMPT
GuiControl, , SDPathEdit, % SDPath
IniWrite, % SDpath, % iniPath, % "User", % "SDpath"
checkSDCard(SDPath)
return
Format:
MsgBox, 4, , Möchten Sie fortfahren? (Drücken Sie JA oder NEIN)
IfMsgBox No
return
Format2:
MsgBox, 4, , Möchten Sie fortfahren? (Drücken Sie JA oder NEIN)
IfMsgBox No
return
Zaehlen:
count := 0
Loop, Files,% SDPath . "\*", R
count++
GuiControl,, Zaehlen,% count
selectAudio:
starting := "::{20d04fe0-3aea-1069-a2d8-08002b30309d}"
if (AudioPath != AUDIOPROMPT)
starting := "*" . AudioPath
FileSelectFolder, AudioPath , % starting ,2, Wähle einen Ordner aus
if (AudioPath = "")
AudioPath := AUDIOPROMPT
GuiControl, , AudioPathEdit, % AudioPath
nextFolder := nextFolder(SDPath)
readFileList(AudioPath)
IniWrite, % AudioPath, % iniPath, % "User", % "AudioPath"
return
copyAudio:
Gui, Submit, NoHide
GuiControl, +Disabled, CopyAudioBut
SB_SetText("Kopiere Dateien")
nextFolder := nextFolder(SDPath)
targetFolderName := targetFoldertoPath(SDPath, targetFolder)
; MsgBox, % SDPath . "\" . targetFoldertoPath(SDPath, targetFolder)
FileCreateDir, % SDPath . "\" . targetFolderName
FileList := ""
filesC := LV_GetCount()
; Loop, Files, % AudioPath . "\*.mp3", F
; {
; FileList .= A_LoopFileName . "`n"
; }
; Sort, FileList
srcFilename := ""
nid := 1
Loop, Files, % SDPath . "\" . targetFolderName . "\*"
nid++
srcFolder := ""
Loop, % LV_GetCount()
{
if (nid > 255)
{
MsgBox, % "Fehler: Maximal 255 Dateien pro Ordner möglich"
Return
}
SB_SetText("Kopiere - " . A_Index . "/" . filesC . " nach " . targetFolderName)
LV_GetText(mode,A_Index)
LV_GetText(srcFilename,A_Index,2)
LV_GetText(srcPath,A_Index,5)
folderFile := SubStr(srcPath, InStr(srcPath, "\", false, 0, 2)+1)
folder := SubStr(folderFile,1, InStr(folderFile, "\") - 1)
if (srcFolder != folder)
{
srcFolder := folder
FileAppend, % targetFolderName . " -> " . folder , % COPYLOG
}
if (mode = "überspringen")
continue
filename := Format("{1:03}",nid++)
if (WithFilename) {
repFN := RegExReplace(srcFilename,".mp3","")
if (SmartRename) {
repFN := smartRename(repFN)
}
filename .= "-" . repFN
}
filename .= ".mp3"
FileCopy, % srcPath, % SDPath . "\" . targetFolderName . "\" . filename
}
checkSDCard(SDPath)
GuiControl, -Disabled, CopyAudioBut
SB_SetText("Fertig")
return
LVClick:
If (A_GuiEvent = "A")
{
LV_GetText(mode, A_EventInfo,1)
If (mode = "kopieren")
LV_Modify(A_EventInfo, , "überspringen")
else
LV_Modify(A_EventInfo, , "kopieren")
}
return
targetFoldertoPath(SDPath,targetFolder)
{
; get position of selected element
targetFolder := targetFolder - 1
; if its zero use the new
if (targetFolder = 0)
return nextFolder(SDPath)
Else
return Format("{1:02}",targetFolder)
}
smartRename(str)
{
str := StrReplace(str, "�","ae")
str := StrReplace(str, "�","oe")
str := StrReplace(str, "�","ue")
str := StrReplace(str, "�","ss")
; remove leading digits
str := RegExReplace(str, "^\d+","")
; remove non word characters and convert to camelCase
str := RegExReplace(str, "i)(\W+)(\w)","$U2")
return str
}
nextFolder(SDPath)
{
return Format("{1:02}",nFNumb(SDPath))
}
nFNumb(SDPath)
{
Loop, 99
If not FileExist(SDPath . "\" . Format("{1:02}",A_Index))
return A_Index
}
TargetFolderDropDown(SDPath,preselected)
{
if (preselected = "")
preselected := 1
max := nFNumb(SDPath)
str := "|" . Format("{1:02}",max) . " (Neu)|"
if (preselected = 1)
str .= "|"
Loop, % max - 1
{
str .= Format("{1:02}",A_Index) . "|"
if (A_Index = preselected - 1)
str .= "|"
}
return str
}
checkSDCard(SDPath)
{
Global targetFolder
errors := ""
; check mp3 folder
If not FileExist(SDPath . "\mp3") {
errors .= "Fehlender Ordner: mp3`n"
}
; check advert folder
If not FileExist(SDPath . "\advert") {
errors .= "Fehlender Ordner: advert`n"
}
; check additional folders
Loop, Files, % SDPath . "\*", D
{
If A_LoopFileAttrib contains H,R,S ; Skip any file that is either H (Hidden), R (Read-only), or S (System).
continue ; Skip this file and move on to the next one.
If not RegExMatch(A_LoopFileName,"^(\d\d|advert|mp3)$")
{
errors .= "Ungültiger Ordnername: " A_LoopFileName " -- im Hauptverzeichnis`n"
}
}
Loop, Files, % SDPath . "\*", F
errors .= "Ungültige Datei: " A_LoopFileName " -- im Hauptverzeichnis`n"
; next folder
nextFolder(SDPath)
; GuiControl, , NextFolder, % "Nächster Ordner: " . nextFolder(SDPath)
GuiControl, , TargetFolder, % TargetFolderDropDown(SDPath,targetFolder)
; skipped folder names
empty := false
Loop, 99
If not FileExist(SDPath . "\" . Format("{1:02}",A_Index))
{
empty := true
}
Else If (empty) {
errors .= "Nummerierung des Ordners nicht durchgängig: " Format("{1:02}",A_Index) "`n"
}
if (StrLen(errors)) {
GuiControl, Show, Fehler
GuiControl, , Errors, % errors
GuiControl, , Check, Folgende Fehler sind aufgetreten:
} Else {
GuiControl, Show, Fehler
GuiControl, , Errors, % errors
GuiControl, ,Check, SD-Karte ist ok
}
; Drive Space
DriveSpaceFree, freeSpace, % SDPath
DriveGet, cap, Capacity, % SDPath
GuiControl, , SDSpace, % Format("{1:.2f}",freespace/1024) . " GB von " . Format("{1:.2f}",cap/1024) . " GB verfügbar "
GuiControl, , SDSpaceProgress, % 100 - (freespace/cap) * 100
}
readFileList(AudioPath)
{
global recursive
SB_SetText("Dateien lesen")
LV_Delete()
mode := "F"
if (recursive)
mode .= "R"
Loop, Files, % AudioPath . "\*.mp3", % mode
{
LV_Add("", "kopieren", A_LoopFileName, id3read(A_LoopFileFullPath,021),id3read(A_LoopFileFullPath,026),A_LoopFileFullPath)
}
; auto-size
LV_ModifyCol()
; LV_ModifyCol(5, 0)
SB_SetText("Bereit")
}
SaveIni:
Gui, Submit, NoHide
IniWrite, % AsAdmin, % iniPath, % "User", % "AsAdmin"
IniWrite, % WithFilename, % iniPath, % "User", % "WithFilename"
IniWrite, % Recursive, % iniPath, % "User", % "Recursive"
IniWrite, % SmartRename, % iniPath, % "User", % "SmartRename"
readFileList(AudioPath)
Return
GuiClose:
ExitApp
Recheck:
checkSDCard(SDPath)
return
Restart:
Reload
#If !A_IsCompiled
F12::Reload
If A_Scriptname=id3read.ahk
ExitApp
/*
Size ................................... (001): 166 KB
Element Type ........................... (002): MP3 audio format
Change Date ............................ (003): 12/03/2012 21:33
Creation ............................... (004): 12/03/2012 21:33
Last visit ............................. (005): 12/03/2012 21:33
Attributes ............................. (006): A
Recognized type ........................ (009): Audio
Owner .................................. (010): Voyager \ Janeway
Art .................................... (011): Music
Participants interpreters .............. (013): Individual Artist
Album .................................. (014): Album Name
Years .................................. (015): 1998
Genre .................................. (016): Other
Conductors ............................. (017): Conductor
Review ................................. (019): Not rated
Authors ................................ (020): Individual Artist
Title .................................. (021): Title of the song
Copyright .............................. (025): CopyRight
Track number ........................... (026): 1
Length ................................. (027): 00:00:06
Bitrate ................................ (028): 192 kbit / s
Protected .............................. (029): No
Computer ............................... (053): VOYAGER (this computer)
File Name .............................. (155): MP3-object Test.mp3
Released ............................... (173): No
Folder name ............................ (176): Desktop
Folder Path ............................ (177): D: \ system \ desktop
Folder ................................. (178): Desktop (C: \ System)
Path ................................... (180): D: \ WINDOWS \ Desktop \ MP3 object Test.mp3
Type ................................... (182): MP3 audio format
Link status ............................ (188): Unresolved
Encoded by ............................. (193): Encoded by (e.g. LAME)
Editor ................................. (195): Publisher
Subtitle ............................... (196): Subtitle
Album artist ........................... (217): Album Artist
Beats per minute ....................... (219): 120
Composers .............................. (220): Composer
Part of a set .......................... (224): 1
Sequence name .......................... (254): Subtitle
Approval Status ........................ (269): Not released
https://autohotkey.com/board/topic/83376-ahk-l-read-id3-tags-function/
*/
id3read(filename,code)
{
objShell := ComObjCreate("Shell.Application")
SplitPath,filename , ename,edir
oDir := objShell.NameSpace(eDir)
oMP3 := oDir.ParseName(eName)
return oDir.GetDetailsOf(oMP3, code)
}
Einfach den Text nehmen und in einem Texteditor einfügen.
Dann als wunschname.ahk abspeichern.
Ich hoffe ihr habt Freude daran…
hallo,
frage: Warum sortiert er mir die ganze Zeit die Liederreihenfolge um? Habe extra alles in reihenfolge Benannt…was muss ich da ändern?
Edit: hab es mit Mp3tag gemacht…n paar klicks mehr…aber ging
Kann ich mir gern nochmal anschauen.
Aber gut dass du für dich schon mal eine Lösung gefunden hast.
Nach was hast du denn sortiert und was hat er dir ausgegeben?
Hey, also ich hatte meine Dateien in Namen als 1.benjamin, 2bb, 3Benj usw. davin 15 stück.
Mal hat er sie beginnend mit 10 neu nummeriert und damit halt die Reihenfolge vertauscht oder sonst irgendwas aber nicht von 1- 15… Mach ich da was falsch?
Jupp, machst du.
Er sortiert Zeichen für Zeichen.
Und 2bb kommt nach dieser Sicht erst nach 10bb
Deshalb nenn die Dateien 01 benjamin, 02bb
Hast du in einem Ordner mal über hundert, nennst du sie 001 002
EDIT: Windows und manch andere Programme „denken mit“ und erkennen solche Aufzählung.
Dann sortieren sie so, wie es sich der Benenner gedacht hat.
In der Regel kann man sich aber angewöhnen Dateien so abzulegen
Aha…das war hakt schwer…weil ich beim runterladen irgendwie falsche Titelnummern vergeben hat…dann han ich das sortiert…aber gut zu wissen…ist falsch
Also lag es nicht bzw nur bedingt am Tool.