Konvertertool - Ordner übergreifend sauber Dateien suchen und auflisten

  • ich würde das so machen:

    [autoit]

    $line = StringSplit ( "c:\balbla\bndsad\test.pdf", "\")
    $out = UBound($line) -1
    MsgBox(64, "", $line[$out])

    [/autoit]

    Aber _pathsplit geht auch.

    achso hast du mal iDir = 0 probiert? oder wie soll die Ausgabe aus sehen?

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • habs nun mit _PathSplitt am laufen, denke mal das läuft auch stabil ^^

    iDir hatt ich nicht probiert, brauche halt als ausgaben "datename.odt"

    die endung bekomm ich ja mit stringtrimright und 4 weg


    aber im Moment läuft alles ^^ morgen noch schönheitskur und beschreiben und ich post es mal ^^ :D

    • Offizieller Beitrag

    _PathSplit und StringSplit haben aber den Nachteil, dass sie ihrerseits wieder ein Array zurückgeben.
    Ich würde einfach eine For...Next-Schleife und StringMid verwenden:

    [autoit]


    For $i = 1 To $aFiles[0]
    $aFiles[$i] = StringMid($aFiles[$i], StringInStr($aFiles[$i], '\', 0, -1) + 1)
    Next

    [/autoit]

    Vorher, mit der Funktion von Bugfix, die Dateien einlesen.

  • es geht, super fein,

    hab aber Pathsplit drin gelassen weil auch wenns array mitgibt, funzts prima und sauber

    desweiteren hab ich nun ein Problem was ich nie gesehen habe und ein Kollege mich grad drauf aufmerksam gemacht hat ^^

    Mein Konverter sucht ja im Moment alle Dateien mit der endung .lwp im vorgegebenen Verzeichnissbaum, speicherts die unter .doc und dann mit OpenOffic in .odt.

    Soweit so gut nur hab ich die ganze zeit im normalen Konverter der keine Ordnerstrukturfunktion hatte die Daten ("alte" lwp und doc (die zum umwandeln ja nötig waren) von Hand gelöscht ^^

    nur bei 17,500 Dateien in 14,500 Ordner ist dass aufwendig ^^

    gibts nen sauberen Lösch befehl dafür den ich in einem seperaten Programm auch über eine version von Bugfixes rekursiven suchdings ausführen kann?!

    Plan:
    Ich lasse mir alle lwp/doc Dateien auflisten (wie zu begin der konvertierung) nur diesmal lösch ich sie, da die Pfade von Computerprofis angelegt wurden sehen sie ca so aus: /Kunde Berater 34/Daten des Kunden, Beratung offen!/usw
    also sehr lange, mit sonderzeichen und sehr tief, denke mal übern del befehl inner Kommandozeile werd ich nicht weiter kommen.

    oder funktioniert es die sachen in eine batch zu schreiben und die dann zu starten?!

    MfG

  • hihi das Problem kenn ich auch. Es scheinen alle Anwender verliebt in Ordner zu sein... Das ist bei meinen Anwendern genauso :)
    Aber wo ist denn das Problem? Du kannst doch mit dem Ergebniss des Arrays alle Dateien löschen, die Du löschen möchtest.

    Franz


    FileDelete ( "path" )
    DirRemove ( "path" [, recurse] )

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    da die Pfade von Computerprofis angelegt wurden sehen sie ca so aus: /Kunde Berater 34/Daten des Kunden, Beratung offen!/


    :P Das ist doch schon ein Widerspruch in sich. Wenn jemand solche Pfade erstellt, hat er das Recht verwirkt sich Profi zu nennen. :rofl:
    Nur, weil man etwas machen kann, heißt es noch lange nicht, dass man es auch tun muss.
    Und Sonderzeichen in Ordner- oder Dateinamen sind einfach krank. :wacko:

  • ironie ist das schönste Stilmittel in der deutchen Sprache ^^ :)

    da die Pfade vn Computerprofis angelegt wurden

    die 2 Befehle test ich mal, war halt die Frage ob die mit den Pfaden zurecht kommen ^^


    dessweiteren, hat dein array eine größen beschränkung bugfix?!

    weil als ich mal alle 17,500 Dokumente "einlesen" lies hatte er ab 3997 den Pfad vorne zum zähler ins Kästchen geschrieben, anzeige fehler oder bug?! ^^

    MfG
    heute darf ich erstmal wiedern Raum Audio/Video Verkabeln ^^

    • Offizieller Beitrag

    weil als ich mal alle 17,500 Dokumente "einlesen" lies hatte er ab 3997 den Pfad vorne zum zähler ins Kästchen geschrieben, anzeige fehler oder bug?!


    Weder noch :D - ist limitiert in der ArrayDisplay-Funktion durch die Variable: $iLVIAddUDFThreshold = 4000.

  • tut der ja nicht weh wenn ich die auf 20k setze oder?!

    :rolleyes:

    edit:

    in der array.au3, wo die variable &i_showover4000 dafür verwandwortlich ist steht sie auf 1 = alle zeigen

    bzw das is die einzige passage in er array.au3 die mir dafür in frage kommt:

    [autoit]


    ;Create Listview==================================================================
    $size = WinGetClientSize($searchGUI)
    GUICtrlDelete($searchlistView)
    $searchlistView = GUICtrlCreateListView($sTempHeader, 0, 16, $size[0] - 10, $size[1] - 90, BitOR($LVS_SHOWSELALWAYS, $LVS_EDITLABELS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL))
    GUICtrlSetResizing($searchlistView, BitOR($GUI_DockLeft, $GUI_DockTop, $GUI_DockRight, $GUI_DockBottom))
    For $c = 0 To UBound($ar_TempSingle) - 1
    If ($c < 3999) Or $i_ShowOver4000 Then
    If $c < 3999 Then
    $GUICtrlCreateListViewItem = GUICtrlCreateListViewItem($ar_TempSingle[$c], $searchlistView)
    If Not $GUICtrlCreateListViewItem Then GUICtrlCreateListViewItem($s_NotDoneLine, $searchlistView)
    Else
    $ret = _GUICtrlListView_InsertItem ($searchlistView, $ar_TempSingle[$c], -1)
    If ($ret = $LV_ERR) Then _GUICtrlListView_InsertItem ($searchlistView, $s_NotDoneLine, -1)
    EndIf
    ElseIf ($c >= 3999) Then
    ExitLoop
    EndIf
    Next

    [/autoit]

    wenn ich da alle 3999er auf 19999 stelle sollts wieder gehen oder irre ich?

    edit2: sollte ich nicht lieber diese function mir aus der array rauskopieren und unten an mein Dokument heften und es dann erst verendern?! is der sauberere Weg oder?

    2 Mal editiert, zuletzt von fachinformadiga (9. Oktober 2008 um 12:16)

  • naja ich hab den Usern nun einfach gesagt macht nicht mehr als 4000 ^^

    weil sonst würds eh zu lange dauern ^^

    nun die Frage 2:

    Kann ich mir das Array auch mehrfach anzeigen lassen? d.h. das ich mir 2 nebeneinander anziegen lasse zum vergleichen ob alle umgewandelt wurden.

  • Ich wusste nicht, ob ich dazu ein eigenes Thema öffne, da ich ja nun mit meinen Fragen komme und nicht vom Autor-Thema abkommen möchte.


    Ich möchte, dass die gefundenen Dateien aus dem Array geöffnent werden. Nacheinander.
    Erste Datei öffnen, dann passiert mit ihr was, solange soll das Script auch warten. Dann ist die Nächste dran, bis die Liste abgearbeitet ist.

    Ich habe viele Ansätze im Kopf, und Vorstellungen welche Befehle hilfreich sind, aber es dann wirklich niederzutippen, da habe ich ein Problem mit (wegen mangelnder Kenntnisse).

    Mit ShellExecute (??) würde ich sie öffnen, ?? wäre die gewünschte Zeile vom Array, da steht ja der ganze Pfad+Datei
    Mit While 1 (ich nehme an 1 steht für: solange Array gefüllt ist)
    [Anweisung]
    WEnd
    oder mach ich das mit Do ... Until?

  • huhu

    also ich uppe das skript mal nach meiner Mipa, dann sollte diene PM auch beantwortet sein

    hab sogar bisschen beschrieben drin ; - )

    also ich "$afiles" gibts mir ja den Wert aus dem array (von bugfix) aus

    und in einer Whileschleife bearbeite ich die ausgabe von $afiles[$x]
    dann nacheinander

    also so ca. genau das was du auch brauchst ^^

    wenn du noch bis so 13-14 Uhr warten könntest ;)

  • *starrt den Bildschirm an und wartet ungeduldig*


    Nein, ;) , dann ess ich auch was. Soviel Zeit muss sein. :rolleyes: Guten Hunger. Ich bin gespannt.

  • soo

    Liebe Xeti

    ich hab doch schon druchgerungen

    erstmal die .au3

    mit der rekursiven File Suche , wenn du Fragen hast wie wo was funktioniert /pm me :)

    lg

    .exe up ich nachher im mainfred wenn ich noch 3 kleine Sachen angepasst habe

  • Ich meine soweit meins angepasst zu haben, bekomme aber diese Fehlermeldung:
    "Wend" statement with no matching "While" statement.:
    WEnd ?????????????????????????????????????

    Quellcode

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    While $x <=$y

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

    $datei = $aFiles[$x]
    If @error Then
    MsgBox(48, "", "Fehler", 2)
    ExitLoop
    Else

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

    $dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
    $Datei_name = $dateiarray[3] & $dateiarray[4]

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

    ;Datei_oE: Datei ohne Endung
    $Datei_oE = $datei
    $Datei_oE = StringTrimRight($datei, 3)

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

    ShellExecute($datei)
    ;Send ( "keys" [, flag] )
    Sleep (3000)

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

    If WinActive( "Technobox CAD6", "$aFiles") then
    WinWaitActive ( "Technobox CAD6", "$aFiles")
    Send ("{F12}")
    sleep (2000)
    EndIF

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

    If WinActive ("Zeichnung speichern unter") then
    WinWaitActive ("Zeichnung speichern unter")
    Send("{ALTDOWN}")
    Send("s")
    Send("{ALTUP}")
    Sleep (2000)
    EndIf

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

    If WinActive ( "DWG Export", "") then
    WinWaitActive ("DWG Export", "")
    Send("{ENTER}")
    Sleep (2000)
    EndIf

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

    If WinActivate ( "Technobox CAD6", "$filesearch") then
    Send("{CTRLDOWN}")
    Send("{F4}")
    Send("{CTRLUP}")
    sleep (2000)
    EndIF

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

    $x = $x +1

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

    WEnd

    [/autoit]

    EDIT: [Zeile 7] Fehler gefunden, beim ersten IF habe ich statt ENDIF ELSE zustehen. 8|

    Einmal editiert, zuletzt von Xethria (23. Oktober 2008 um 13:38)

  • Danke, zeitgleich hatte ich es auch gefunden.

    Nun bin ich beim nächsten Problem.

    Ich gebe Tastendrücke ab, die aber natürlich nur fruchten, wenn sie im richtigen Fenster passieren...
    Aber das Programm was ich benutzen ist ständig "nichht" im Vordergrund... X(

  • Ich weiss nich, wo die fehler alle sind in meine script aber

    WinActivate
    WinSetOnTop

    scheinen nicht zu gehen.
    ich hab das gefühl, dass woanders fehler sind, dass die nicht "greifen". ;(

  • versuch das mal so ;)

    Spoiler anzeigen
    [autoit]

    While $x <=$y

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

    $datei = $aFiles[$x]
    If @error Then
    MsgBox(48, "", "Fehler", 2)
    ExitLoop
    Else

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

    $dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
    $Datei_name = $dateiarray[3] & $dateiarray[4]

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

    ;Datei_oE: Datei ohne Endung
    $Datei_oE = $datei
    $Datei_oE = StringTrimRight($datei, 3)

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

    ShellExecute($datei)
    ;Send ( "keys" [, flag] )
    Sleep (3000)

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

    ;If WinActive( "Technobox CAD6", $aFiles) then ;soll schon ne variable sein oder?
    While WinActive("Technobox CAD6") = 0
    WinActivate("Technobox CAD6")
    WEnd
    ;WinWaitActive ( "Technobox CAD6", $aFiles)
    Send ("{F12}")
    sleep (2000)
    ;EndIF

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

    ;If WinActive ("Zeichnung speichern unter") then
    ;WinWaitActive ("Zeichnung speichern unter")
    While WinActive("Zeichnung speichern unter") = 0
    WinActivate("Zeichnung speichern unter")
    WEnd
    Send("{ALTDOWN}")
    Send("s")
    Send("{ALTUP}")
    Sleep (2000)
    ;EndIf

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

    ;If WinActive ( "DWG Export", "") then
    ;WinWaitActive ("DWG Export", "")
    While WinActive("DWG Export") = 0
    WinActivate("DWG Export")
    WEnd
    Send("{ENTER}")
    Sleep (2000)
    ;EndIf

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

    ;If WinActivate ( "Technobox CAD6", $filesearch) then
    While WinActive("Technobox CAD6") = 0
    WinActivate("Technobox CAD6")
    WEnd
    Send("{CTRLDOWN}")
    Send("{F4}")
    Send("{CTRLUP}")
    sleep (2000)
    ;EndIF

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

    $x = $x +1 ; das kannst du auch so schreiben: $x += 1
    EndIf ;muss das hier nicht noch rein?!
    WEnd

    [/autoit]

    Keine Garantie dass das so funktioniert ist jetzt einfach mal so ausm Kopf raus (mach net wirklich viel mit den Win-Funktionen)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D