ich würde das so machen:
[autoit]$line = StringSplit ( "c:\balbla\bndsad\test.pdf", "\")
$out = UBound($line) -1
MsgBox(64, "", $line[$out])
Aber _pathsplit geht auch.
achso hast du mal iDir = 0 probiert? oder wie soll die Ausgabe aus sehen?
ich würde das so machen:
[autoit]$line = StringSplit ( "c:\balbla\bndsad\test.pdf", "\")
$out = UBound($line) -1
MsgBox(64, "", $line[$out])
Aber _pathsplit geht auch.
achso hast du mal iDir = 0 probiert? oder wie soll die Ausgabe aus sehen?
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
_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:
For $i = 1 To $aFiles[0]
$aFiles[$i] = StringMid($aFiles[$i], StringInStr($aFiles[$i], '\', 0, -1) + 1)
Next
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] )
da die Pfade von Computerprofis angelegt wurden sehen sie ca so aus: /Kunde Berater 34/Daten des Kunden, Beratung offen!/
Das ist doch schon ein Widerspruch in sich. Wenn jemand solche Pfade erstellt, hat er das Recht verwirkt sich Profi zu nennen.
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
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 - ist limitiert in der ArrayDisplay-Funktion durch die Variable: $iLVIAddUDFThreshold = 4000.
tut der ja nicht weh wenn ich die auf 20k setze oder?!
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
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?
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. 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
While $x <=$y
[/autoit] [autoit][/autoit] [autoit]$datei = $aFiles[$x]
If @error Then
MsgBox(48, "", "Fehler", 2)
ExitLoop
Else
$dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
$Datei_name = $dateiarray[3] & $dateiarray[4]
;Datei_oE: Datei ohne Endung
$Datei_oE = $datei
$Datei_oE = StringTrimRight($datei, 3)
ShellExecute($datei)
;Send ( "keys" [, flag] )
Sleep (3000)
If WinActive( "Technobox CAD6", "$aFiles") then
WinWaitActive ( "Technobox CAD6", "$aFiles")
Send ("{F12}")
sleep (2000)
EndIF
If WinActive ("Zeichnung speichern unter") then
WinWaitActive ("Zeichnung speichern unter")
Send("{ALTDOWN}")
Send("s")
Send("{ALTUP}")
Sleep (2000)
EndIf
If WinActive ( "DWG Export", "") then
WinWaitActive ("DWG Export", "")
Send("{ENTER}")
Sleep (2000)
EndIf
If WinActivate ( "Technobox CAD6", "$filesearch") then
Send("{CTRLDOWN}")
Send("{F4}")
Send("{CTRLUP}")
sleep (2000)
EndIF
$x = $x +1
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit]EDIT: [Zeile 7] Fehler gefunden, beim ersten IF habe ich statt ENDIF ELSE zustehen.
Es fehlt das EndIf für das erste If. Es kommt wahrsxcheinlich vor das WEnd.
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...
klappt es auch nicht mit WinActivate?!
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
While $x <=$y
[/autoit] [autoit][/autoit] [autoit]$datei = $aFiles[$x]
If @error Then
MsgBox(48, "", "Fehler", 2)
ExitLoop
Else
$dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
$Datei_name = $dateiarray[3] & $dateiarray[4]
;Datei_oE: Datei ohne Endung
$Datei_oE = $datei
$Datei_oE = StringTrimRight($datei, 3)
ShellExecute($datei)
;Send ( "keys" [, flag] )
Sleep (3000)
;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
;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
;If WinActive ( "DWG Export", "") then
;WinWaitActive ("DWG Export", "")
While WinActive("DWG Export") = 0
WinActivate("DWG Export")
WEnd
Send("{ENTER}")
Sleep (2000)
;EndIf
;If WinActivate ( "Technobox CAD6", $filesearch) then
While WinActive("Technobox CAD6") = 0
WinActivate("Technobox CAD6")
WEnd
Send("{CTRLDOWN}")
Send("{F4}")
Send("{CTRLUP}")
sleep (2000)
;EndIF
$x = $x +1 ; das kannst du auch so schreiben: $x += 1
EndIf ;muss das hier nicht noch rein?!
WEnd
Keine Garantie dass das so funktioniert ist jetzt einfach mal so ausm Kopf raus (mach net wirklich viel mit den Win-Funktionen)