HTML Vorlagendateien anhand gleichnamiger andersformatiger Dokumente in einem Verzeichnis erstellen

  • Da ich oft verschiedene Dateiformate in html umwandeln muß, stehe ich ebenso oft vor folgendem Problem.
    In einem Verzeichnis liegen verschiedene Dateien in verschiedenen Formaten.

    Code
    Datei1.doc
    datei2.pdf
    datei3.ppt


    Alle sollen nach html umgewandelt werden. Das Original soll erhalten bleiben. Es sollen jeweils namensgleiche html- Vorlagen im gleichen Verzeichnis angelegt werden.
    Also:

    Code
    datei1.doc
    datei2.pdf
    datei3.ppt
    datei1.html
    datei2.html
    datei3.html

    Diese html sollten dann folgende HTML Template enthalten, so daß ich in einer anschließenden manuellen Überarbeitung in Dreamweaver schnell die Seite bearbeiten und die Dateien zuordnen kann.

    Ich starte gerade erst mit Autoit. Kann ich das Programm später auch auf 64 bit Systemen laufen lassen?
    Gibt es eigentlich eine Möglichkeit es nachher unter Linux laufen zu lassen (also eine Linux Version?)
    Bitte helft mir.

    Gruß Rochus

    Einmal editiert, zuletzt von roferix (28. Oktober 2009 um 18:25)

  • Nich dass ich jetzt anfange wild vor mich hin zu programmieren.. Wie werden denn die Dateien zu html umgewandelt? Ich setzt mich mal schnell an das erstellen der (fast) leeren HTML dateien.. wenn ich fertig bin meld ich mich nochmal per /edit ;)


    EDIT:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    $Pfad = @UserProfileDir&"\Desktop\HTML\"
    $Files = _FileListToArray($Pfad,"*",1)
    If Not @error Then
    Dim $text[10]
    $text[0] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    $text[1] = '<html xmlns="http://www.w3.org/1999/xhtml">'
    $text[2] = '<head>'
    $text[3] = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
    $text[4] = '<title>Untitled Document</title>'
    $text[5] = '</head>'
    $text[6] = @CRLF
    $text[7] = '<body>'
    $text[8] = '</body>'
    $text[9] = '</html>'
    _ArrayDisplay($text)
    For $i = 1 to $Files[0]
    _FileWriteFromArray($Pfad&"\"&$Files[$i]&".html",$text)
    Next

    MsgBox(0,"","Fertig")
    Else
    MsgBox(0,"","Fehler!!!")
    EndIf

    [/autoit]

    Ich hoffe es ist das was du suchst. ansonsten kannst du ja einfach nochmal für dumme SEuBo's erklären ;)

  • Danke, das hört sich ja gut an.

    html erhalte ich normalerweise mit Copy & Paste oder Exportfunktionen aus den Programmen. Nicht optimal: Aber etwas Handarbeit bleibt immer, wenn es gut und barrierefrei werden soll.

    Was aber nervt sind die stupiden sich wiederholenden Tätigkeiten. Daher auch meine Anfrage. Vielen Dank schon Mal das du dich des Problems annimmst.

    Gruß Rochus

  • hmm naja wenn man sich da wirklich ausgiebig mit befasst kann man auch das komplette konvertieren automatisieren -> Wenns ein PDF ist, soll es vom Acrobat reader aus exportiert werden. Bei nem .doc halt von Word/OpenOffice aus. Möglich ist mit AutoIt (fast) alles

    Auf 64 Bit umgebung wird es mit sicherheit laufen - dafür haben 64 bit systeme ja 32 bit emulatoren.
    Und auf Linux funktioniert diese Version zu 99% auch. Dank Wine. (kanns leider nich testen - Mein pc hat kein ubuntu mehr... )

    hier übrigens die "auskommentierte" version - falls es dich groß interessiert was da genau passiert..

    Spoiler anzeigen
    [autoit]

    #Include <File.au3> ; dieses Include wird von den Funktionen _FileListToArray und _FileWriteFromArray benötigt.

    [/autoit] [autoit][/autoit] [autoit]

    $Pfad = @UserProfileDir&"\Desktop\HTML\" ; Hier der gewünschte Pfad.
    $Files = _FileListToArray($Pfad,"*",1) ; Liest die Dateien im o.g. Pfad in einen Array.

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then ; Wenn das ganze Fehlerfrei ablief,
    ;Kann die eigentliche Aufgabe starten...
    ;Hier folgt nun der Text der kommen soll
    Dim $text[10] ; mit Dim wird ein Array definiert, der deinen Text enthält.
    $text[0] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    $text[1] = '<html xmlns="http://www.w3.org/1999/xhtml">'
    $text[2] = '<head>'
    $text[3] = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
    $text[4] = '<title>Untitled Document</title>'
    $text[5] = '</head>'
    $text[6] = @CRLF
    $text[7] = '<body>'
    $text[8] = '</body>'
    $text[9] = '</html>'

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to $Files[0] ; startet eine schleife, mit so vielen durchläufen wie Dateien gefunden wurden
    _FileWriteFromArray($Pfad&"\"&$Files[$i]&".html",$text) ;Erstellt die jeweilige Datei und schreibt den Text in selbige.
    Next ; Danach...

    MsgBox(0,"","Fertig") ;Selbsterklärend.
    Else
    MsgBox(0,"","Fehler!!!") ;Selbsterklärend.
    EndIf

    [/autoit]
  • Danke SEuBo

    funktioniert genau wie es soll und ich hab es sogar verstanden! Ich habe es dahingehend noch verändert das es in Scriptdir startet.
    Also kopier ich es in das Verzeichnis und starte es. Dummerweise macht er dann aus meinem Script auch eine Vorlagendatei des Scripts- die dann wieder lösche.

    Aber schon sehr paraktisch.

    Weitergedacht:

    1. Genau die Funktionalität, aber Verzeichnisübergreifend- Das Programm soll das also auch in den Unterordnern machen!
    2. Das Script nimmt den ganzen Dateinamen und hängt .html an. Ist nicht unpraktisch aber irgendwie nicht schün, wenn das File dann präsentation.ppt.html heisst.

    Danke noch Mal. Du hasst mir sehr geholfen.

    Gruß Rochus

  • Wenn du mir bis morgen Zeit gibts kann ich dir das auch dahingehend umbauen. Bin nur grade am zocken und würd ungern wieder ne längere Pause machen :P Kannst ja einfach morgen früh nochmal reinschauen - ich werds dann hier per edit reinmachen.

    EDIT:
    Hmm das ging jetzt wesentlich einfacher als ich es gedacht hab.
    Benötigt wird die Funktion _GetFilesFolder_Rekursiv() von BugFix. Die bekommst du hier
    Die musst du dann entweder in deinem AutoIt-Verzeichnis in den Includes Ordner, oder ins Skriptverzeichnis tuen. Ich empfehle ersteres.

    Spoiler anzeigen
    [autoit]


    #Include <File.au3> ; dieses Include wird von den Funktionen _FileListToArray und _FileWriteFromArray benötigt.
    #include <_GetFilesFolder_Rekursiv.au3>
    #include <Array.au3>
    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $text[10] ; mit Dim wird ein Array definiert, der deinen Text enthält.
    $text[0] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    $text[1] = '<html xmlns="http://www.w3.org/1999/xhtml">'
    $text[2] = '<head>'
    $text[3] = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
    $text[4] = '<title>Untitled Document</title>'
    $text[5] = '</head>'
    $text[6] = @CRLF
    $text[7] = '<body>'
    $text[8] = '</body>'
    $text[9] = '</html>'


    $Pfad = @ScriptDir ; Hier der gewünschte Pfad.
    $Pfade = _GetFilesFolder_Rekursiv($Pfad, '*', 1)
    _ArrayAdd($Pfade,$Pfad) ; Fügt dem Array zusäzlich das Stammverzeichnis hinzu.
    $Pfade[0] = $Pfade[0]+1 ; Erhöht die Anzahl der gefundenen Ordner um 1 (wichtig für die Schleife)

    [/autoit] [autoit][/autoit] [autoit]

    If _RunDOS("dir " & $Pfad&"\_Converted\") = 0 Then ;Falls der _Converted Ordner existiert
    _ArrayDelete($Pfade,_ArraySearch($Pfade,$Pfad&"\_Converted\")) ; Beziehe ihn nciht mit in die Suche ein..
    $Pfade[0] = $Pfade[0] - 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i2 = 1 to $Pfade[0] ; Startet für jeden Unterordner eine Schleife.

    $Files = _FileListToArray($Pfade[$i2],"*",1) ; Liest die Dateien im o.g. Pfad in einen Array.
    If Not @error Then ; Wenn das ganze Fehlerfrei ablief,
    ;Kann die eigentliche Aufgabe starten...

    $scriptfound = _ArraySearch($Files,@ScriptName) ;suche das skript aus der Liste der gefundenen Dateien.
    If Not @error Then ; wenn es gefunden wurde,
    _ArrayDelete($Files,$scriptfound) ; entferne es aus der Liste.
    $Files[0] = $Files[0]-1 ; kürze die Anzahl der gefundenen Dateien um 1. (Da eine aus der Liste enfernt wurde)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to $Files[0] ; startet eine schleife, mit so vielen durchläufen wie Dateien gefunden wurden
    _FileWriteFromArray($Pfade[$i2]&"\"&StringTrimRight($Files[$i],4)&".html",$text) ;Erstellt die jeweilige Datei und schreibt den Text in selbige.

    [/autoit] [autoit][/autoit] [autoit]

    ;-------->>> Falls alle Dateien ins Stammverzeichniss sollen das benutzen!
    ;~ _FileWriteFromArray($Pfad&"\"&StringTrimRight($Files[$i],4)&".html",$text)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ oder...
    ;-------->>> Falls alle Dateien in einen eigenen Ordner im Stammverzeichniss erstellt werden sollen.
    ;~ If Not _RunDOS("dir " & $Pfad&"\_Converted\") = 0 Then DirCreate($Pfad&"\_Converted\");prüft ob das verzeichnis existiert und erstellt es ggf.
    ;~ _FileWriteFromArray($Pfad&"\_Converted\"&StringTrimRight($Files[$i],4)&".html",$text)

    [/autoit] [autoit][/autoit] [autoit]

    Next ; Danach...
    Else
    MsgBox(0,"","Fehler!!!") ;Selbsterklärend.
    EndIf
    Next
    MsgBox(0,"","Fertig") ;Selbsterklärend.

    [/autoit]

    Ich wusste nicht, WO er die HTML Dateien für die Dateien aus den Unterordnern ablegen sollte.
    Also habe ich dir im Skript 3 Möglichkeiten geboten

    1. Im Ordner in dem sie gefunden worden.
    2. Im Stammverzeichnis.
    3. In einem eigenen Unterordner "_Converted" im Stammverzeichnis.

    Desweiteren habe ich nun eingebaut, dass die Dateien ihre Ursprüngliche Dateiendung nicht übernehmen. Bis jetzt ist das nur für 3-stellige endungen der Fall. aus einer .html datei wird also "beispiel.html -> beispiel..html". Das wäre aber auch einfach zu "verbessern" und ich hätte das in der Zeit wo ich diesen Absatz hier schreibe mit sicherheit auch machen können... aber ich bin Hundemüde. Wenn es von Nöten is mach ichs morgen früh.

    Außerdem erstellt das skript jetzt keine html datei mehr für sich selbst.

    Wenn bei dir fehler auftreten sag mir bitte bescheid - will ja auch was lernen :P

  • Sehr inspirierend :)

    Ich habe mal versucht ein Gui zu Programmieren. So stelle ich mir das später vor.

    [autoit]


    #Include <File.au3> ; dieses Include wird von den Funktionen _FileListToArray und _FileWriteFromArray benötigt.
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <_GetFilesFolder_Rekursiv.au3>
    #include <Array.au3>
    #include <Process.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=c:\users\rochus\desktop\lfb.kxf
    $Form1_1 = GUICreate("LFB Toolbox", 537, 362, 457, 193)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1_1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1_1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "Form1_1Restore")
    $Button2 = GUICtrlCreateButton("Zielverzeichnis auswählen", 8, 8, 153, 89, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button2Click")
    $Input1 = GUICtrlCreateInput("", 8, 128, 521, 21)
    GUICtrlSetOnEvent(-1, "Input1Change")
    $Group1 = GUICtrlCreateGroup("Optionen", 320, 8, 209, 89)
    $Input2 = GUICtrlCreateInput("", 400, 72, 121, 21)
    GUICtrlSetOnEvent(-1, "Input2Change")
    $Checkbox5 = GUICtrlCreateCheckbox("*ppt", 328, 72, 65, 17)
    GUICtrlSetOnEvent(-1, "Checkbox5Click")
    $Checkbox6 = GUICtrlCreateCheckbox("*.doc", 328, 48, 57, 25)
    GUICtrlSetOnEvent(-1, "Checkbox6Click")
    $Checkbox7 = GUICtrlCreateCheckbox("*.pdf", 328, 24, 57, 25)
    GUICtrlSetOnEvent(-1, "Checkbox7Click")
    $Checkbox1 = GUICtrlCreateCheckbox("alle Dateiformate", 424, 24, 97, 25)
    GUICtrlSetOnEvent(-1, "Checkbox1Click")
    $Label3 = GUICtrlCreateLabel("Format: Bsp: *.odt", 400, 48, 88, 17)
    GUICtrlSetOnEvent(-1, "Label3Click")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Arbeitsweise", 168, 8, 145, 89)
    $Radio1 = GUICtrlCreateRadio("Rekursiv", 176, 24, 113, 25)
    GUICtrlSetOnEvent(-1, "Radio1Click")
    $Radio2 = GUICtrlCreateRadio("gewähltes Verzeichnis", 176, 48, 129, 25)
    GUICtrlSetOnEvent(-1, "Radio2Click")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("Zielverzeichnis:", 8, 104, 77, 17)
    GUICtrlSetOnEvent(-1, "Label1Click")
    $Label2 = GUICtrlCreateLabel("Templateauswahl: Ein Standard ist voreingestellt -ansonsten ein Template wählen:", 8, 160, 391, 17)
    GUICtrlSetOnEvent(-1, "Label2Click")
    $Button3 = GUICtrlCreateButton("Template auswählen", 8, 176, 153, 41, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button3Click")
    $Label4 = GUICtrlCreateLabel("gewähltes Template:", 8, 224, 102, 17)
    GUICtrlSetOnEvent(-1, "Label4Click")
    $Input3 = GUICtrlCreateInput("Standardhtml (Westeuropäisch)", 8, 248, 521, 21)
    GUICtrlSetOnEvent(-1, "Input3Change")
    $Button1 = GUICtrlCreateButton("HTML - Vorlagenerstellung beginnen", 8, 304, 441, 49, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button4 = GUICtrlCreateButton("Info", 456, 304, 73, 49, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button4Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func Button1Click()
    $Files = _FileListToArray($Pfad,"*",1) ; Liest die Dateien im o.g. Pfad in einen Array.

    [/autoit][autoit][/autoit][autoit]

    If Not @error Then ; Wenn das ganze Fehlerfrei ablief,
    ;Kann die eigentliche Aufgabe starten...
    ;Hier folgt nun der Text der kommen soll
    Dim $text[10] ; mit Dim wird ein Array definiert, der deinen Text enthält.
    $text[0] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    $text[1] = '<html xmlns="http://www.w3.org/1999/xhtml">'
    $text[2] = '<head>'
    $text[3] = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
    $text[4] = '<title>Untitled Document</title>'
    $text[5] = '</head>'
    $text[6] = @CRLF
    $text[7] = '<body>'
    $text[8] = '</body>'
    $text[9] = '</html>'

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 to $Files[0] ; startet eine schleife, mit so vielen durchläufen wie Dateien gefunden wurden
    _FileWriteFromArray($Pfad&"\"&$Files[$i]&".html",$text) ;Erstellt die jeweilige Datei und schreibt den Text in selbige.
    Next ; Danach...

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"","Fertig") ;Selbsterklärend.
    Else
    MsgBox(0,"","Fehler!!!") ;Selbsterklärend.
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Button2Click()
    Global $Pfad = FileSelectFolder("Bitte wähle das Zielverzeichnis aus!", "")
    If @error Then
    MsgBox(16, "Fehler", "Sie haben kein Verzeichnis ausgewählt!" & @CRLF & "Standartzielverzeichnis: Desktop")
    GUICtrlSetData($Input1, @DesktopDir)
    Else
    GUICtrlSetData($Input1, $Pfad)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Button3Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Button4Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Checkbox1Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Checkbox5Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Checkbox6Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Checkbox7Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Form1_1Close()
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Form1_1Maximize()

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Form1_1Minimize()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Form1_1Restore()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Input1Change()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Input2Change()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Input3Change()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Label1Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Label2Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Label3Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Label4Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Radio1Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func Radio2Click()

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Ich bleib am Ball!
    Danke noch Mal für Deine Hilfe. Ich könnte auch weiterhin Deine Ratschläge gebrauchen.
    Gruß Rochus

  • Sieht schick aus. Ich hab mich mal ein bisschen dran gesetzt das alles einzubauen aber das wird noch ein bisschen dauern - also bitte Geduld ;) Von mir aus kannst du es auch gerne alles selbst einbauen, aber da ich irgendwie spaß an dem Projekt gefunden habe (endlich mal wieder ein skript mit sinn an dem ich arbeite) mach ichs eh ferig :D

    Kann halt nur wie gesagt ein paar Tage dauern bis ich soweit bin, da ich mich momentan sehr stark mit au3Irrlicht (AutoIt 3D-Engine) beschäftige, und an deinem skript nur abends rumbastel. Dazu kommen noch die Aufgaben des echten lebens >.>
    Aber keine Sorge, vergessen hab ich dich nicht :D

  • Hört sich super an!

    Ich versuch auch schon das Script zu vervollständigen! Aber mir fehlen noch ein paar Grundlagen. Ich bleib aber dran.

    Nur sind jetzt leider meine Herbstferien (BW) vorbei. Ich muss mich auch wieder anderen Themen widmen.

    Bin schon sehr gespannt auf Dein Script.

    Auch auf Dein 3D Irrlicht :)

    Gruß Rochus

  • Ich glaube bzw. hoffe dass ich es nun soweit fertig habe, dass es für dich benutzbar ist.
    Ich habe deine GUI etwas umgebaut ( vom OnEvent in den Msg-Modus ), außerdem musste ich noch ein paar controls einbauen, damit man das Zielverzeichnis bestimmen kann. Schau es dir einfach an und sag mir ob es so okey ist:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3> ; dieses Include wird von den Funktionen _FileListToArray und _FileWriteFromArray benötigt.
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <_GetFilesFolder_Rekursiv.au3>
    #include <Array.au3>
    #include <Process.au3>
    #Region Var
    Global $Sel_Arbeitsweise = "Rekursiv", $Sel_ZielDir = "Quell", $Sel_Format = "*"
    Global $Pfad = @DesktopDir, $Pfade, $Files_Array, $Files_Array_Full
    #Region ### START Koda GUI section ### Form=c:\users\rochus\desktop\lfb.kxf
    $GUI_MAIN = GUICreate("LFB Toolbox", 537, 362, 457, 193)
    $Button_QuellDir = GUICtrlCreateButton("Quellverzeichnis auswählen", 8, 8, 153, 89, $WS_GROUP)
    $Input_QuellDir = GUICtrlCreateInput(@DesktopDir, 8, 128, 521, 21)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateGroup("Optionen", 320, 8, 209, 89)
    $Input_Format = GUICtrlCreateInput("", 400, 72, 121, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox_ppt = GUICtrlCreateCheckbox("*ppt", 328, 72, 65, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox_doc = GUICtrlCreateCheckbox("*.doc", 328, 48, 57, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox_pdf = GUICtrlCreateCheckbox("*.pdf", 328, 24, 57, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox_all = GUICtrlCreateCheckbox("alle Dateiformate", 424, 24, 97, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Label_Format = GUICtrlCreateLabel("Format Bsp: *.odt", 400, 48, 88, 17)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group_Arbeitsweise = GUICtrlCreateGroup("Arbeitsweise", 168, 8, 145, 89)
    $Radio_rekursiv = GUICtrlCreateRadio("Rekursiv", 176, 24, 113, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Radio_normal = GUICtrlCreateRadio("gewähltes Verzeichnis", 176, 48, 129, 25)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateGroup("Zielverzeichnis:",320,150,209,89)
    $Radio_Ziel_quell = GUICtrlCreateRadio("Quellverzeichnis",328,168)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Radio_Ziel_rek = GUICtrlCreateRadio("Quellverzeichnis (Rekursiv)",328,192)
    $Radio_Ziel_sep = GUICtrlCreateRadio("In Unterordner ""_Converted""",328,216)

    [/autoit] [autoit][/autoit] [autoit]



    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label_QuellDir = GUICtrlCreateLabel("Quellverzeichnis:", 8, 104, 77, 17)
    $Label_Template = GUICtrlCreateLabel("Templateauswahl: Ein Standard ist voreingestellt:", 8, 160, 250, 17)
    $Button_Template = GUICtrlCreateButton("Template auswählen", 8, 176, 153, 41, $WS_GROUP)
    $Label_Template_Sel = GUICtrlCreateLabel("gewähltes Template:", 8, 224, 102, 17)
    $Input_Template = GUICtrlCreateInput("Standardhtml (Westeuropäisch)", 8, 248, 521, 21, $ES_READONLY)
    $Button_Start = GUICtrlCreateButton("HTML - Vorlagenerstellung beginnen", 8, 304, 441, 49, $WS_GROUP)
    $Button_Info = GUICtrlCreateButton("Info", 456, 304, 73, 49, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()

    Case $Button_Start
    ;~ MsgBox(0," ",$Sel_Arbeitsweise&@CRLF&$Sel_Format&@CRLF&$Sel_ZielDir)
    GUISetState(@SW_MINIMIZE)
    TrayTip("LFB Toolbox","LFB Toolbox führt die gewünschten Aktionen aus." & @CRLF & "Bitte gedulden Sie sich einen Moment.",1)
    _GetFolder()
    _GetFiles()
    _createHTML()
    MsgBox(0,"Fertig!","LFB Toolbox ist nun fertig")
    GUISetState(@SW_RESTORE)
    Case $Button_QuellDir
    Global $Pfad = FileSelectFolder("Bitte wähle das Quellverzeichnis aus!", "")
    If @error Then
    MsgBox(16, "Fehler", "Sie haben kein Verzeichnis ausgewählt!" & @CRLF & "Standardquellverzeichnis: Desktop")
    GUICtrlSetData($Input_QuellDir, @DesktopDir)
    Else
    GUICtrlSetData($Input_QuellDir, $Pfad)
    EndIf

    Case $Input_QuellDir
    $Pfad = GUICtrlRead($Input_QuellDir)

    Case $Input_Format
    If Not GUICtrlRead($Input_Format) = "" Then
    GUICtrlSetState($Checkbox_doc,$GUI_DISABLE)
    GUICtrlSetState($Checkbox_pdf,$GUI_DISABLE)
    GUICtrlSetState($Checkbox_ppt,$GUI_DISABLE)
    $Sel_Format = StringReplace(StringReplace(GUICtrlRead($Input_Format)," ",""),"*","")
    Else
    GUICtrlSetState($Checkbox_doc,$GUI_ENABLE)
    GUICtrlSetState($Checkbox_pdf,$GUI_ENABLE)
    GUICtrlSetState($Checkbox_ppt,$GUI_ENABLE)
    EndIf

    Case $Checkbox_all, $Checkbox_doc, $Checkbox_pdf, $Checkbox_ppt
    If GUICtrlRead($Checkbox_all) = 1 Then
    GUICtrlSetState($Checkbox_doc,$GUI_DISABLE)
    GUICtrlSetState($Checkbox_pdf,$GUI_DISABLE)
    GUICtrlSetState($Checkbox_ppt,$GUI_DISABLE)
    GUICtrlSetState($Input_Format,$GUI_DISABLE)
    GUICtrlSetData($Input_Format,"")
    $Sel_Format = "*"
    Else
    GUICtrlSetState($Checkbox_doc,$GUI_ENABLE)
    GUICtrlSetState($Checkbox_pdf,$GUI_ENABLE)
    GUICtrlSetState($Checkbox_ppt,$GUI_ENABLE)
    GUICtrlSetState($Input_Format,$GUI_ENABLE)


    If GUICtrlRead($Checkbox_doc) = 1 AND GUICtrlRead($Checkbox_ppt) = 1 AND GUICtrlRead($Checkbox_pdf) = 1 Then
    $Sel_Format = ".doc|.ppt|.pdf"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 1 AND GUICtrlRead($Checkbox_ppt) = 1 AND GUICtrlRead($Checkbox_pdf) = 4 Then
    $Sel_Format = ".doc|.ppt"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 1 AND GUICtrlRead($Checkbox_ppt) = 4 AND GUICtrlRead($Checkbox_pdf) = 1 Then
    $Sel_Format = ".doc|.pdf"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 4 AND GUICtrlRead($Checkbox_ppt) = 1 AND GUICtrlRead($Checkbox_pdf) = 1 Then
    $Sel_Format = ".pdf|.ppt"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 1 AND GUICtrlRead($Checkbox_ppt) = 4 AND GUICtrlRead($Checkbox_pdf) = 4 Then
    $Sel_Format = ".doc"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 4 AND GUICtrlRead($Checkbox_ppt) = 1 AND GUICtrlRead($Checkbox_pdf) = 4 Then
    $Sel_Format = ".ppt"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    ElseIf GUICtrlRead($Checkbox_doc) = 4 AND GUICtrlRead($Checkbox_ppt) = 4 AND GUICtrlRead($Checkbox_pdf) = 1 Then
    $Sel_Format = ".pdf"
    GUICtrlSetState($Input_Format,$GUI_DISABLE)

    Else
    $Sel_Format = ""
    GUICtrlSetState($Checkbox_all,$GUI_ENABLE)
    GUICtrlSetState($Input_Format,$GUI_ENABLE)
    EndIf
    EndIf


    Case $Radio_rekursiv, $Radio_normal
    If GUICtrlRead($Radio_rekursiv) = 1 Then
    GUICtrlSetState($Radio_Ziel_rek,$GUI_ENABLE)
    $Sel_Arbeitsweise = "Rekursiv"
    Else
    If GUICtrlRead($Radio_Ziel_rek) = 1 Then
    GUICtrlSetState($Radio_Ziel_quell,$GUI_CHECKED)
    $Sel_ZielDir = "Quell"
    EndIf
    GUICtrlSetState($Radio_Ziel_rek,$GUI_DISABLE)
    $Sel_Arbeitsweise = "Normal"
    EndIf


    Case $Radio_Ziel_quell, $Radio_Ziel_rek, $Radio_Ziel_sep
    If GUICtrlRead($Radio_Ziel_quell) = 1 Then
    $Sel_ZielDir = "Quell"
    ElseIf GUICtrlRead($Radio_Ziel_rek) = 1 Then
    $Sel_ZielDir = "Rekursiv"
    ElseIf GUICtrlRead($Radio_Ziel_sep) = 1 Then
    $Sel_ZielDir = "Seperat"
    EndIf


    Case $GUI_EVENT_CLOSE
    Exit


    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _createHTML()
    Dim $text[10] ; mit Dim wird ein Array definiert, der deinen Text enthält.
    $text[0] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    $text[1] = '<html xmlns="http://www.w3.org/1999/xhtml">'
    $text[2] = '<head>'
    $text[3] = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
    $text[4] = '<title>Untitled Document</title>'
    $text[5] = '</head>'
    $text[6] = @CRLF
    $text[7] = '<body>'
    $text[8] = '</body>'
    $text[9] = '</html>'

    If Not $Files_Array_Full[0][0] = 0 Then
    If $Sel_ZielDir = "Rekursiv" Then
    For $i = 1 to $Files_Array_Full[0][0]
    _FileWriteFromArray($Files_Array_Full[$i][1]&"\"&StringTrimRight($Files_Array_Full[$i][0],4)&".html",$text)
    Next
    ElseIf $Sel_ZielDir = "Quell" Then
    For $i = 1 to $Files_Array_Full[0][0]
    _FileWriteFromArray($Pfad&"\"&StringTrimRight($Files_Array_Full[$i][0],4)&".html",$text)
    Next
    ElseIf $Sel_ZielDir = "Seperat" Then
    If Not FileExists($Pfad&"\_Converted\") Then DirCreate($Pfad&"\_Converted\")
    For $i = 1 to $Files_Array_Full[0][0]
    _FileWriteFromArray($Pfad&"\_Converted\"&StringTrimRight($Files_Array_Full[$i][0],4)&".html",$text)
    Next
    EndIf
    EndIf
    EndFunc
    Func _getFolder()
    If $Sel_Arbeitsweise = "Rekursiv" Then
    Global $Pfade = _GetFilesFolder_Rekursiv($Pfad, '*', 1)
    _ArrayAdd($Pfade,$Pfad)
    $Pfade[0] = $Pfade[0]+1

    [/autoit] [autoit][/autoit] [autoit]

    $num = $Pfade[0]
    If _RunDOS("dir " & $Pfad&"\_Converted\") = 0 Then
    _ArrayDelete($Pfade,_ArraySearch($Pfade,$Pfad&"\_Converted\"))
    $Pfade[0] = $num - 1
    EndIf
    Elseif $Sel_Arbeitsweise = "Normal" Then
    Dim $Pfade[2] = [1, $Pfad]
    EndIf
    EndFunc
    ;
    Func _GetFiles()
    local $x, $Sel_Format_Array

    [/autoit] [autoit][/autoit] [autoit]


    If StringInStr($Sel_Format,"|") Then
    $Sel_Format_Array = StringSplit($Sel_Format,"|")

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $Sel_Format = "*" Then
    Dim $Sel_Format_Array[2] = ["1",""]

    [/autoit] [autoit][/autoit] [autoit]

    Else
    Dim $Sel_Format_Array[2] = ["1",$Sel_Format]
    EndIf


    Dim $Files_Array[1] = ["Dateien"]
    Dim $FilePaths_Array[1] = ["Pfad"]
    For $i = 1 to $Sel_Format_Array[0]
    For $n = 1 to $Pfade[0]
    $Files = _FileListToArray($Pfade[$n],"*"&$Sel_Format_Array[$i],1)
    If IsArray($Files) Then
    If Not $Files[0] = "" Then
    Dim $FilePaths[$Files[0]]
    For $f = 0 to $Files[0]-1
    $FilePaths[$f] = $Pfade[$n]
    Next
    _ArrayDelete($Files,0)
    _ArrayConcatenate($Files_Array,$Files)
    _ArrayConcatenate($FilePaths_Array,$FilePaths)
    EndIf
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Files_Array[0] = UBound($Files_Array)
    $FilePaths_Array[0] = "Pfad"
    Dim $Files_Array_Full[$Files_Array[0]][2]
    For $i = 0 to $Files_Array[0]-1
    $Files_Array_Full[$i][0] = $Files_Array[$i]
    $Files_Array_Full[$i][1] = $FilePaths_Array[$i]
    Next

    $Files_Array_Full[0][0] -= 1
    EndFunc

    [/autoit]

    Bei mir funktioniert es, allerdings bin ich nicht sicher dass ich es ausgiebig genug getestet habe.

    Du kannst nach eigenen Dateierweiterungen suchen. Dabei ist es egal ob du *.txt oder nur .txt schreibst. Der Punkt ist aber wichtig. Möchtest du nach mehreren Dateierweiterungen gleichzeitig suchen musst du diese mit einem |trennen. Hier ist es auch egal ob du Leerzeichen dazwischen setzt. Bsp: " .mp3| *.txt| * . p df " sucht nach .mp3, .txt und .pdf Files.

    Du hast die Möglichkeit das Zielverzeichnis anzugeben. Zur Auswahl stehen
    Quellordner - Das Stammverzeichnis in dem gesucht wurde.
    Quellordner (Rekursiv) - Der Ordner in die Datei gefunden wurde, wird als Zielordner verwendet.
    Unterordner - Der altbekannte Ordner "_Converted" wird im Stammverzeichnis erstellt und alle .htmls werden dort erstellt.

    Weitergedacht / Verbesserungsmöglichkeiten:

    Nachdem man ein eigenes Format eingegeben hat, muss man erst mit ENTER oder einem klick auf oder in ein anderes Control (Button, Input usw.) klicken, damit die Checkboxen deaktiviert werden. Gefällt mir nicht.

    Ein "Datei-Schon-Vorhanden" Dialog für Doppelte Dateien in einem Zielordner.

    Die möglichkeit, Die Struktur des Stammverzeichnisses im Converted Ordner nachzubauen

    Eine Progress Bar.

  • Ich habs gerade schnell mal ausprobiert -- werde es mir heute Abend aber mal genau anschauen.

    Sieht schon mal ganz gut aus. Ich hatte mir auch schon Gedanken gemacht, wie man das im einzelnen umsetzt. Bin schon sehr gespannt auf den Code.

    Wenn man dann solche Hilfe bekommt... das ist einfach gut. Danke noch Mal.

    Ist übrigens für den Lehrerfortbildungsserver (mit 50000 html Seiten). Ich hab vor diese Toolbox noch um einige andere Funktionen zu erweitern.

    Ich werds also heute Abend testen und berichten.... :)

    Gruß Rochus

  • Genial, ich hab ordentlich was dabei gelernt.

    Ich versuche gerade externe Templates einzubinden und erstelle ein gui mit den anderen Funktionalitäten, die wir sonst noch so benötigen.

    Ich werde das von Zeit zu Zeit Mal posten und noch ein paar Fragen anbringen. Vielleicht kann es ja noch einer gebrauchen. Auf jeden Fall bin ich mittlerweile restlos von Autoit überzeugt.

    Gruß Rochus