'Datenexport' - "interaktives" schreiben einer .bat

  • Grüße... ja ich mal wieder ;)

    Heute wiedermal mit einer Frage... und zwar hab ich einen Datenexport (für Hardwaredaten) erstellt.
    Wenn der Nutzer auf Export klickt wird er nach einem Verzeichnis gefragt per FileSelectFolder

    So, nun wird eine .txt Datei erzeugt (_FileCreate) und die Daten dort hinein geschrieben.
    Am Ende des Exports wird eine weitere Datei erzeugt, diesmal eine batch Datein (.bat).
    In diese wird "start" & $ausgewählterOrdner & "\dateiname.txt" geschrieben und nach @tempdir kopiert.

    Dieses batchfile wird danach gestartet um das Export-Log zu öffnen.

    Der Fehler der nun dabei auftritt ist, dass wenn der Nutzer beim Export einen Ordner auswählt der ein Leerzeichen enthält, wie z.B. bei XP "Dokumente und Einstellungen", kann XP damit nicht umgehen und versucht nur "C:\Dokumente" zu öffnen.

    Spoiler anzeigen
    [autoit]

    Func SysExport()
    $GameData[0] = FileSelectFolder("Bitte das Zielverzeichnis für den Export auswählen.", "", 2, @MyDocumentsDir)
    GUICtrlSetState($SysInfo_Export, $GUI_SHOW)
    _FileCreate($GameData[0] & "\SystemInformationen.txt")
    GUICtrlSetState($SysInfo_BarL_status, $GUI_SHOW)
    GUICtrlSetData($SysInfo_Export, 10)
    $Dump = FileOpen($GameData[0] & "\SystemInformationen.txt", 2)
    GUICtrlSetData($SysInfo_Export, 20)
    GUICtrlSetData($SysInfo_BarL_status, "Exportiere Daten . .")
    FileWrite($Dump, "League of Legends - Get it fixed! Tool" & @CRLF & "Systeminformationen" & @CRLF)
    GUICtrlSetData($SysInfo_Export, 30)
    FileWrite($Dump, "______________________________________" & @CRLF & @CRLF)
    GUICtrlSetData($SysInfo_Export, 40)
    GUICtrlSetData($SysInfo_BarL_status, "Exportiere Daten . . .")
    FileWrite($Dump, "Betriebssystem: " & $System[1] & " - " & $System[2] & @CRLF)
    GUICtrlSetData($SysInfo_Export, 50)
    FileWrite($Dump, "Servicepack: " & $System[3] & @CRLF)
    GUICtrlSetData($SysInfo_Export, 60)
    GUICtrlSetData($SysInfo_BarL_status, "Exportiere Daten . ")
    ;FileWrite($File, "###############################" & @CRLF)
    FileWrite($Dump, "CPU Modell: " & $Hardware[1] & @CRLF)
    GUICtrlSetData($SysInfo_Export, 70)
    FileWrite($Dump, "CPU Taktung: " & $Hardware[4] & "x" & $Hardware[2] & " (aktuell: " & $Hardware[3] & ")" & @CRLF)
    GUICtrlSetData($SysInfo_Export, 75)
    GUICtrlSetData($SysInfo_BarL_status, "Exportiere Daten . .")
    ;FileWrite($File, "###############################" & @CRLF)
    FileWrite($Dump, "Grafikkarte: " & $Hardware[8] & @CRLF)
    FileWrite($Dump, "Grafikspeicher: " & $Hardware[9] & @CRLF)
    FileWrite($Dump, "Treiberdatum: " & $Hardware[10] & @CRLF)
    GUICtrlSetData($SysInfo_Export, 80)
    ;FileWrite($File, "###############################" & @CRLF)
    FileWrite($Dump, "Mainboard: " & $Hardware[12] & " (OEM: " & $Hardware[11] & ")" & @CRLF)
    FileWrite($Dump, "Arbeitsspeicher: " & $Hardware[6] & " (" & $Hardware[7] & " Modul(e))" &@CRLF)
    GUICtrlSetData($SysInfo_Export, 90)
    GUICtrlSetData($SysInfo_BarL_status, "Exportiere Daten . . .")
    Sleep(500)
    FileClose($Dump)
    Sleep(500)
    ; => Hier gehts los mit Batch
    _FileCreate(@TempDir & "\SystemInformationen.bat")
    GUICtrlSetData($SysInfo_Export, 100)
    $Dump = FileOpen(@TempDir & "\SystemInformationen.bat", 2)
    sleep(100)
    FileWrite($Dump, "start " & $GameData[0] & "\Systeminformationen.txt")
    GUICtrlSetData($SysInfo_BarL_status, "Fertig! Öffne Exportdatei")
    FileClose($Dump)
    Run(@TempDir & "\SystemInformationen.bat", @TempDir)
    GUICtrlSetData($SysInfo_BarL_status, "Datei geöffnet!")
    GUICtrlSetState($SysInfo_Export, $GUI_HIDE)
    Sleep(3000)
    GUICtrlSetState($SysInfo_BarL_status, $GUI_HIDE)
    EndFunc

    [/autoit]

    Daher die Frage... kann man dies auch irgendwie anderst lösen... z.B. das Notepad starten und diesem eine Datei zum öffnen übergeben?

    Einmal editiert, zuletzt von Matricus (9. März 2010 um 14:04)

  • ... *doof ist*

    Problem selbst gelöst.

    Ich ändere einfach den Inhalt des batch-scriptes..

    [autoit]

    'start notepad "' & $ausgewählterOrdner & '\dateiname.txt"'

    [/autoit]

    ... ich bin so... naja, was solls. ;)
    /closed

    • Offizieller Beitrag
    Zitat
    [autoit]

    $ausgewählterOrdner

    [/autoit]


    Umlaute in Variablennamen würde ich vermeiden :). Kaum eine Programmiersprache unterstützt das ordentlich, ich glaube nicht, dass AutoIt da die rühmliche Ausnahme ist (spätestens auf fremden Systemen kommt es mit nicht UTF8-Dateien sonst meist zu Ärger)...

    Johannes