Datei an (Brenn)-Programm senden

  • Hallo,

    ich versuche grad ein kleines script zu schreiben, dass mir arbeit beim brennen abnimmt =)

    und zwar soll es so ablaufen, dass ich dem script den ordner sage, wo es nach files zum brennen (hauptsächlich avi) suchen soll. danach liest das script nacheinander die dateien, die gebrannt werden sollen ein/aus und brennt diese. ich wechsel eigentlich nur die cds und lass mir in ner msgbox anzeigen, was gerade gebrannt wurde, damit ich die cd beschriften kann.

    den angang habe, und beim ende habe ich auch schon ansätze, die klappen sollten. aber jetzt stehe ich vor dem prob, nachdem ich den path angegeben habe, und das script die dateinamen ausliest, wie übergibt es diesen an das brennprog???

    standardmäßig hat dieses ja ein fenster, wo die files reingezogen werden.
    als tool dafür benutze ich cd xp burner.

    gibt es irgendwas, was mich hier zum ziel bringt?

    ups, script vergessen, schaut bis jetzt so aus:

    Spoiler anzeigen
    [autoit]

    ;
    ;
    ;UBurnMeCrazy
    ;
    ;©sc4ry

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

    ;starte cdbxp
    ;run("C:\Programme\CDBurnerXP Pro 3\cdbxp.exe", @SW_MAXIMIZE)

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

    ;gebe ordner an, wo zu brennende (avi-)files existieren
    $path = FileSelectFolder("Please specify your burning folder", "", 2, "K:\")

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

    ;setzt den aktuellen ordner (wichtig für FileFindFirstFile)
    $dir = FileChangeDir($path)

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

    ;sucht nach avi-files
    $search = FileFindFirstFile("*.avi")

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

    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

    MsgBox(4096, "File:", $file)
    WEnd

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

    ;beendet die suche
    FileClose($search)

    [/autoit]
  • so spontan würde mir da console einfallen also die Daten über Parameter und ShellExecute weitergeben musst halt mal schauen

  • leider wird mir wieder mein englisch zum verhängnis, aber sowohl

    ShellExecute(""C:\Programme\CDBurnerXP Pro 3\cdbxp.exe"", "", "", $search, @SW_MAXIMIZE)

    als auch

    ShellExecute($search, "", "", ""C:\Programme\CDBurnerXP Pro 3\cdbxp.exe"", @SW_MAXIMIZE)

    gehen nicht =/

    man kann cdbxp auch über die cmd bedienen (/oa, /od, /bi), aber leider sind das alles drei wohl keine modes, um eine normale datencd zu erstellen =(

    • Offizieller Beitrag

    Hi,

    ???

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    Global $antwort = FileSelectFolder('Bitte wählen Sie das Verzeichnis aus:', 'c:\', 4, @ScriptDir)
    If $antwort = '' Then
    MsgBox(16, 'Error', 'Abbruch!')
    Exit (0)
    EndIf

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

    $aviFiles = _FileListToArray($antwort, '*.avi', 1)
    If @error Then
    MsgBox(0, "", "No Files\Folders Found.")
    Exit(0)
    EndIf
    For $i = 1 To UBound($aviFiles) - 1
    ; hier was damit machen
    Next

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

    ;Z.B.
    ;ShellExecute('C:\Programme\CDBurnerXP Pro 3\cdbxp.exe', $antwort & $aviFiles[1] , "", "open", @SW_MAXIMIZE)

    [/autoit]

    So long,

    Mega

  • hey, danke th.meger, werde es heute abend mal @home probieren ... hier auf der arbeit plag ich mich solange mit anderen sachen rum *g*

    aber irgendwie schein ich die hilfe missverstanden zu haben =)
    ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )


    bei parameters hät ich jetzt irgendwie an so sachen wie in der cmd gedacht ( /Y /B oder sowas) *g*
    aber um so besser, wenn es dann heute abend geht =)

    • Offizieller Beitrag

    Zu Nero, vllt. hilft es dir.

    Spoiler anzeigen

    Edit:
    War gerade an einem PC mit Nero, hab mal die Parameterliste erstellt:

    Spoiler anzeigen
  • hiho,

    also nachdem ich endlich die zeit gefuden habe, dass zu testen, muss ich sagen, es klappt schonmal ganz gut.
    jetzt habe ich das script soweit angepasst und versucht, dass er das nächste file brennen soll, sobald ich die neue cd eingelegt und das lw geschlossen habe.

    aber irgendwie geht das nicht, er macht garnix (dazu kommt, dass der brennbefehl auf der cmd nicht klappt, aber da hab ich im mom auch noch nicht weitergeguckt).

    Spoiler anzeigen
    [autoit]

    ;
    ;
    ;UBurnMeCrazy
    ;
    ;©sc4ry

    ;starte cdbxp
    ;run("C:\Programme\CDBurnerXP Pro 3\cdbxp.exe", @SW_MAXIMIZE)

    ;gebe ordner an, wo zu brennende (avi-)files existieren
    $path = FileSelectFolder("Please specify your burning folder", "", 2, "K:\")

    ;setzt den aktuellen ordner (wichtig für FileFindFirstFile)
    $dir = FileChangeDir($path)

    ;sucht nach avi-files
    $search = FileFindFirstFile("*.avi")

    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    While 1
    $ready = DriveStatus("G:\")
    while $ready = "Ready"
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    MsgBox(4096, "File:", $file)
    Run(@COMSPEC & " /c C:\Programme\Ahead\Nero>NeroCmd.exe --write --real --drivename g --speed 40 --iso new" & $dir & "\" & $file & "{enter}")
    wend
    WEnd

    ;beendet die suche
    FileClose($search)

    [/autoit]
  • hi,

    ich habe auch etwas "gedoktort" vor einiger zeit mal.
    hier mal ein beispiel , was bei mir funtioniert. ich denke, daran erkennst du auch die problematik und deine kleinen fehler.

    Spoiler anzeigen
    [autoit]

    RunWait('C:\Programme\Nero\Nero 7\Core\nerocmd.exe --drivename m --write --real --dvd --iso Copy "E:\TEMP\copy\*.*" --recursive',"C:\Programme\Nero\Nero 7\Core",@SW_HIDE)

    [/autoit]

    EDIT: wie das brennen auf eine 2. cd/dvd funktioniert weiss ich leider nicht.

    gruss exberliner

    Einmal editiert, zuletzt von ExBerliner (29. April 2007 um 12:52)

  • hey,

    danke für die hilfe.
    also ich habe das script jetzt soweit fertig, dass es funktioniert *g*
    natürlich ist das nur die erste "billigversion" (für mich), die ich aber auch gerne so umschreiben würde, dass sie jeder benutzen kann.

    deswegen kommen noch ein paar änderungen rein, paar sind schon drin.

    rein soll noch:

    -suche nach nerocmd in programme ordner (suche noch ne möglichkeit, das


    Spoiler anzeigen
    [autoit]


    ;NeroCMD AutoBurner V.1
    ;
    ;©sc4ry

    MsgBox(0, "NeroCMD AutoBurner V.1 by sc4ry", "This little Programm will burn your specified Files as Data-CD, you only need a copy of Nero", 5)

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

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, "C:\")
    If @error Then Exit
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

    ;wähle zu suchenden Files
    $Files = Inputbox("Specify what to burn", "Please specify the files, you want to burn", "*.avi", "", 250, 100)
    If @error Then Exit
    $search = FileFindFirstFile($Files)

    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    Run(@comspec)
    winwaitactive("C:\windows\system32\cmd.exe")
    controlsend("C:\windows\system32\cmd.exe", "", "", "C:\programme\neroportableNeroCMD --write --real --drivename g --speed 40 --iso new """ & $BurnDir & "\" & $file & """{enter}")
    MsgBox(0, "Burned:", & $file)
    cdtray("g:", "close")
    WEnd

    ;beendet die suche
    FileClose($search)
    EndIf

    [/autoit]

    er in @programfilesdir suchen soll, aber auch in unterordnern; nutze grad fileexists, sucht aber nicht in unterordnern)
    -suche nach cd-brenner (suche nach "cdrom" und nehm standardmäßig den ersten; nutze drivegetdrive, gibt es was, as gezielt nach cd/dvd-brennern sucht?)
    -brennbefehl direkt an command-line, evtl in hide modus (hoffe das es mit hilfe von ExBerliner klappt, also ohne den wirklichen comspec befehl)
    -msgbox kommt nachdem brennen fertig ist (sollte mit runwait evtl gehen ... bin mir aber noch net sicher)

    für hilfe bin ich immer dankbar *g*

    wenn das soweit steht, kann man es zumindet schonmal auf mehreren pcs frei verwenden.
    danach denke ich noch an verschiedene sachen:
    -dl der nercmd.exe inkl. benötigen dateien (weiss zwar noch nicht was genau benötigt wird, aber werde ich dann in erfahrung bringen)
    -speed-ermittlung (könnte ich jetzt schon gebrauchen, aber noch keine funktion für gesehen)
    -gui in der man auswählen kann, was gebrannt werden soll (vcd, svcd, dvd-video, da im mom nur daten-cd)

    • Offizieller Beitrag

    Hi, hiermit werden die CD/DVD-Laufwerke (alles was Type 'CDROM' hat) ausgegeben. Schließt auch virtuelle Laufwerke ein, die registrieren sich ebenfalls als CDROM.

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_CDROMDrive", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Drive: " & $objItem.Drive & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_CDROMDrive" )
    Endif

    [/autoit]

    EDIT:
    Und hiermit kannst du rekursiv nach "nerocmd.exe" suchen:

    Spoiler anzeigen
    [autoit]

    Dim $file = "nerocmd.exe"
    Dim $SearchFolder = @ProgramFilesDir
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    ShowSubfolders( $FSO.GetFolder($SearchFolder) )
    MsgBox(0, '', "gefunden: " & $PathFound)

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

    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If FileExists($Subfolder.Path & "\" & $file) Then
    $PathFound = $Subfolder.Path & "\" & $file
    ExitLoop
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc

    [/autoit]
  • dank dir bug, hab es jetzt fast fertig, aber irgendwas geht nicht.

    folgende variante geht (ist natürlich nicht ganz schlüssig, weil eine if..then fehlt)

    Spoiler anzeigen
    [autoit]

    ;
    ;suche nerocmd, suche brenner, cmd + parameter @hide, alles in ini
    ;NeroCMD AutoBurner V.1
    ;
    ;©sc4ry

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

    $ini = "NeroCMD AutoBurner.ini"
    MsgBox(0, "NeroCMD AutoBurner V.1 by sc4ry", "This little Programm will burn your specified Files as Data-CD, you only need a copy of Nero", 5)
    ;suche nach NeroCMD.exe
    Dim $file = "nerocmd.exe"
    Dim $SearchFolder = @ProgramFilesDir
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )
    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If FileExists($Subfolder.Path & "\" & $file) Then
    $PathFound = $Subfolder.Path & "\" & $file
    ;schreibe Pfad in ini
    IniWrite($ini, "Files", "NeroCMD", $PathFound)
    ExitLoop
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc
    ;fehlermeldung wenn nicht gefunden
    if not FileExists($pathfound) Then
    MsgBox(16, "Error", "NeroCMD was not found on your PC, please install Nero first")
    exit
    Else
    EndIf
    ;suche nach brenner/cdrom
    $var = DriveGetDrive("cdrom")
    if not @error Then
    for $i = 1 to $var[0]
    ;schreibe lw in ini
    IniWrite($ini, "Drive", "Recorder", $var[$i])
    Next
    EndIf

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, "C:\")
    If @error Then
    ;lösche ini bei error, da sonst $BurnDir fehlt
    FileDelete(@scriptdir & "\" & $ini)
    Exit
    else
    ;schreibe $BurnDir in ini
    IniWrite($ini, "Path", "BurnDir", $BurnDir)
    endif
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

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

    IniRead(@ScriptDir & "\" & $ini, "Files", "NeroCMD", "")
    $recorder = IniRead(@ScriptDir & "\" & $ini, "Drive", "Recorder", "")
    $IniBurn = IniRead(@ScriptDir & "\" & $ini, "Path", "BurnDir", "")

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

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, $IniBurn)
    If @error Then Exit
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

    ;wähle zu suchenden Files
    $Files = Inputbox("Specify what to burn", "Please specify the files, you want to burn", "*.avi", "", 250, 100)
    If @error Then Exit
    $search = FileFindFirstFile($Files)
    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(16, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    run(@comspec)
    WinWaitActive("C:\WINDOWS\system32\cmd.exe")
    Send($recorder) ;$PathFound & ' --write --real --drivename ' & $recorder & ' --speed 40 --iso new " ' & $BurnDir & '\' & $file & " ')
    ;MsgBox(0, "Burned:", $file)
    WEnd
    ;beendet die suche
    FileClose($search)

    [/autoit]

    das hier geht aber nicht, hab da die if...then bedingung drin.
    also sofern die ini existiert, kann er die ersten paar abfragen übersprigen, und soll diese aus der ini auslesen.

    Spoiler anzeigen
    [autoit]

    ;
    ;suche nerocmd, suche brenner, cmd + parameter @hide, alles in ini
    ;NeroCMD AutoBurner V.1
    ;
    ;©sc4ry

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

    $ini = "NeroCMD AutoBurner.ini"
    if not FileExists(@scriptdir & "/" & $ini) then
    MsgBox(0, "NeroCMD AutoBurner V.1 by sc4ry", "This little Programm will burn your specified Files as Data-CD, you only need a copy of Nero", 5)
    ;suche nach NeroCMD.exe
    Dim $file = "nerocmd.exe"
    Dim $SearchFolder = @ProgramFilesDir
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )
    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If FileExists($Subfolder.Path & "\" & $file) Then
    $PathFound = $Subfolder.Path & "\" & $file
    ;schreibe Pfad in ini
    IniWrite($ini, "Files", "NeroCMD", $PathFound)
    ExitLoop
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc
    ;fehlermeldung wenn nicht gefunden
    if not FileExists($pathfound) Then
    MsgBox(16, "Error", "NeroCMD was not found on your PC, please install Nero first")
    exit
    Else
    EndIf
    ;suche nach brenner/cdrom
    $var = DriveGetDrive("cdrom")
    if not @error Then
    for $i = 1 to $var[0]
    ;schreibe lw in ini
    IniWrite($ini, "Drive", "Recorder", $var[$i])
    Next
    EndIf

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, "C:\")
    If @error Then
    ;lösche ini bei error, da sonst $BurnDir fehlt
    FileDelete(@scriptdir & "\" & $ini)
    Exit
    else
    ;schreibe $BurnDir in ini
    IniWrite($ini, "Path", "BurnDir", $BurnDir)
    endif
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

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

    else
    IniRead(@ScriptDir & "\" & $ini, "Files", "NeroCMD", "")
    $recorder = IniRead(@ScriptDir & "\" & $ini, "Drive", "Recorder", "")
    $IniBurn = IniRead(@ScriptDir & "\" & $ini, "Path", "BurnDir", "")

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

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, $IniBurn)
    If @error Then Exit
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

    ;wähle zu suchenden Files
    $Files = Inputbox("Specify what to burn", "Please specify the files, you want to burn", "*.avi", "", 250, 100)
    If @error Then Exit
    $search = FileFindFirstFile($Files)
    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(16, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    run(@comspec)
    WinWaitActive("C:\WINDOWS\system32\cmd.exe")
    Send($recorder) ;$PathFound & ' --write --real --drivename ' & $recorder & ' --speed 40 --iso new " ' & $BurnDir & '\' & $file & " ')
    MsgBox(0, "Burned:", $file)
    WEnd
    ;beendet die suche
    FileClose($search)
    endif

    [/autoit]

    AutoIt3 Syntax Checker v1.54 Copyright (c) Tylo 2006

    F:\NeroCMD.AutoBurner.V1.au3(16,2) : ERROR: missing EndIf.
    Func
    ^
    F:\NeroCMD.AutoBurner.V1.au3(8,48) : REF: missing EndIf.
    if not FileExists(@scriptdir & "/" & $ini) then
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    F:\NeroCMD.AutoBurner.V1.au3(55,1) : ERROR: syntax error
    else
    ^
    F:\NeroCMD.AutoBurner.V1.au3 - 2 error(s), 0 warning(s)
    >Exit code: 2 Time: 1.599

    das sind die fehler die dabei rauskommen. aber FUNC geht zb in der anderen version, wo if...then fehlt.
    ich versteh es nicht.

  • auf ersten blick :

    falsch: if not FileExists(@scriptdir & "/" & $ini) then
    richtig: if not FileExists(@scriptdir & "\" & $ini) then

    EDIT: betrifft das 2. script zeile 8

    EDIT2: auf den zweiten blick: ich weiss jetzt nicht genau, ob es erlaubt ist, eine function mitten im programm zu haben. auf jeden fall dient es der übersichtlichkeit, wenn diese immer unterhalb des programms steht.

    gruss exberliner

    3 Mal editiert, zuletzt von ExBerliner (30. April 2007 um 17:34)

  • nach dem vorliegenden programm-code hast du schon recht, dass die function nur in diesem einen fall benutzt wird. eine function stellt eine sogenannte subroutine dar bzw. definiert eine nutzerfunktion, welche beliebig oft aufgerufen werden kann.

    lies unbedingt die bemerkungen in der hilfe zu func .. endfunc hinsichtlich der arrays, variablen und parameter. es kommen sonst schnell unerwünschte ergebnisse zustande. schau zum verständnis mal in dem beitrag von bugfix hier

    wegen der übersichtlichkeit gehören solche "subroutinen" an das ende des programm, auch wenn sie nur einmal benutzt werden.

    so sollte es dann aussehen:

    Spoiler anzeigen
    [autoit]

    ;
    ;suche nerocmd, suche brenner, cmd + parameter @hide, alles in ini
    ;NeroCMD AutoBurner V.1
    ;
    ;©sc4ry

    $ini = "NeroCMD AutoBurner.ini"
    if not FileExists(@scriptdir & "\" & $ini) then
    MsgBox(0, "NeroCMD AutoBurner V.1 by sc4ry", "This little Programm will burn your specified Files as Data-CD, you only need a copy of Nero", 5)
    ;suche nach NeroCMD.exe
    Dim $file = "nerocmd.exe"
    Dim $SearchFolder = @ProgramFilesDir
    Dim $PathFound
    $FSO = ObjCreate("Scripting.FileSystemObject")
    Showsubfolders( $FSO.GetFolder($SearchFolder) )
    ;fehlermeldung wenn nicht gefunden
    if not FileExists($pathfound) Then
    MsgBox(16, "Error", "NeroCMD was not found on your PC, please install Nero first")
    exit
    Else
    EndIf
    ;suche nach brenner/cdrom
    $var = DriveGetDrive("cdrom")
    if not @error Then
    for $i = 1 to $var[0]
    ;schreibe lw in ini
    IniWrite($ini, "Drive", "Recorder", $var[$i])
    Next
    EndIf

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, "C:\")
    If @error Then
    ;lösche ini bei error, da sonst $BurnDir fehlt
    FileDelete(@scriptdir & "\" & $ini)
    Exit
    else
    ;schreibe $BurnDir in ini
    IniWrite($ini, "Path", "BurnDir", $BurnDir)
    endif
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

    else
    IniRead(@ScriptDir & "\" & $ini, "Files", "NeroCMD", "")
    $recorder = IniRead(@ScriptDir & "\" & $ini, "Drive", "Recorder", "")
    $IniBurn = IniRead(@ScriptDir & "\" & $ini, "Path", "BurnDir", "")

    ;wähle Ordner mit zu brennenden Daten
    $BurnDir = FileSelectFolder("Please specify your burning folder", "", 2, $IniBurn)
    If @error Then Exit
    ;setzt den "aktuellen ordner" (wichtig für FileFindFirstFile)
    $path = FileChangeDir($BurnDir)

    ;wähle zu suchenden Files
    $Files = Inputbox("Specify what to burn", "Please specify the files, you want to burn", "*.avi", "", 250, 100)
    If @error Then Exit
    $search = FileFindFirstFile($Files)
    ;gibt nacheinander in einer msgbox die gefunden files aus
    If $search = -1 Then
    MsgBox(16, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    run(@comspec)
    WinWaitActive("C:\WINDOWS\system32\cmd.exe")
    Send($recorder) ;$PathFound & ' --write --real --drivename ' & $recorder & ' --speed 40 --iso new " ' & $BurnDir & '\' & $file & " ')
    MsgBox(0, "Burned:", $file)
    WEnd
    ;beendet die suche
    FileClose($search)
    endif

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

    ; hier endet das proggi (auch ohne dem Exit-befehl)
    ; alternativ wird hier weiterer code folgen

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

    Func ShowSubFolders($Folder)
    For $Subfolder in $Folder.SubFolders
    If FileExists($Subfolder.Path & "\" & $file) Then
    $PathFound = $Subfolder.Path & "\" & $file
    ;schreibe Pfad in ini
    IniWrite($ini, "Files", "NeroCMD", $PathFound)
    ExitLoop
    EndIf
    ShowSubFolders( $Subfolder )
    Next
    EndFunc

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

    ; hier ggf. weitere functions

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


    schon spät (oder zu früh ?); hoffe es ist noch verständlich rüber gekommen.

    gruss exberliner

  • hey, so klappt es schonmal super.
    hab jetzt das gröbste was reinsoll auch drin, nur eine sache nervt mich noch:

    diese variante habe ich zZ (immernoch)

    [autoit]


    run(@ComSpec)
    WinWaitActive("C:\WINDOWS\system32\cmd.exe")
    ControlSend("C:\WINDOWS\system32\cmd.exe", "", "", $PathFound & " --write --real --drivename " & $recorder & " --speed " & $speed & " --iso new """ & $BurnDir & "\" & $file & """" & "{Enter}")

    [/autoit]

    ich hätte aber gerne was wie

    [autoit]


    RunWait(@ComSpec & " /c " & $PathFound & " --write --real --drivename " & $recorder & " --speed " & $speed & " --iso new """ & $BurnDir & "\" & $file & """" & "{Enter}")

    [/autoit]


    oder

    [autoit]


    Run($PathFound & " --write --real --drivename " & $recorder & " --speed " & $speed & " --iso new """ & $BurnDir & "\" & $file & """" & "{Enter}")

    [/autoit]

    aber sowohl das eine als auch das andere geht nicht. hat jmd eine idee was ich falsch mache?

    PS: anschließend soll eine msgbox ausgegeben werden. so wie ich es zz nutze, kommt sie direkt, nachdem der befehl in die cmd eingegeben wurde.
    lieber wär es mir, wenn die msgbox nach dem brennvorgang kommt, also wahlweise, wenn nero die cd ausschmeißt. kann man das programmieren?
    PPS: gibt es auch eine funktion, die den brennspeed ermittelt?

  • schau dir nochmal mein befehl an:

    Spoiler anzeigen
    [autoit]

    RunWait('C:\Programme\Nero\Nero 7\Core\nerocmd.exe --drivename m --write --real --dvd --iso Copy "E:\TEMP\copy\*.*" --recursive',"C:\Programme\Nero\Nero 7\Core",@SW_HIDE)

    [/autoit]

    und setze das für dich einfach um. achte auf " und '

    wenn nach dem brennen eine msgbox ausgegeben werden soll MUSST du runwait() verwenden. nur so wird bis zum ende des brennens gewartet, bevor die folgezeile im script abgearbeitet wird.

    nach dem brennen wird die lade automatisch geöffnet. wenn du diese schliessen willst : nerocmd.exe --drivename m --load (m ist bei mir das laufwerk M: )

    bei der speedermittlung kann ich leider nicht weiterhelfen. schau mal in der befehlsliste von nerocmd auf der Kommandoebene mit nerocmd /?.

    EDIT: was vergessen; achte auch auf leerzeichen. z.b. bei /c, wenn ich das richtig sehe, muss da ein leerzeichen noch dahinter also anstatt "/c" so: "/c ". auch nach dem $Pathfound gehört ein leerzeichen, also anstatt $PathFound & " --write ... so: $PathFound & " --write. wenn du unsicher bist, lass dir den befehl in einer msgbox testweise ausgeben oder consolewrite und schau genau nach, ob die syntax und die leerzeichen etc alles stimmt.

    EDIT2: mach dich nochmal mit dem runwait()-befehl vertraut:
    RunWait ( "filename" [, "workingdir" [, flag]] ). ich vermisse bei dir das "workingdir", dies ist unbedingt erforderlich, wenn du das entsprechende verzeichnis nicht gerade im focus hast. (immer angeben am besten, dann bist auf der sicheren seite). und vergiss momentan das {enter} und das controlsend(). .. vorläufig.

    gruss exberliner

    3 Mal editiert, zuletzt von ExBerliner (1. Mai 2007 um 19:38)