Ist mit "\*.out" eine Textdatei gemeint, oder willst Du alle *.out-Files anzeigen ?
Anzeigen = Dateinamen oder Dateiinhalt ?
Beiträge von Micha_he
-
-
Da kann ich nicht weiterhelfen, mit der IE-Fernsteuerung habe ich mich noch nie befasst. Ich bin reiner Opera-User.
-
Wo ist denn der Button ? In deinem Script, in einem anderen Programm, im Browser, u.s.w. ?
-
hä... ich versteh nur Bahnhof !
-
Die letzten Zeile könnte man natürlich etwas ordentlicher schreiben:
[autoit]If Not FileExists ("c:\inv_Dateien\inv.out") Then
[/autoit]
MsgBox(1, "Datei", "Datei ist nicht" & @CRLF & "vorhanden !")
Else
FileDelete("c:\inv_Dateien\inv.out")
EndIf -
Wie Du schon bemerkt hast fehlt in Zeile 2 ein '#include <GUICombobox.au3>'. Bei mir liegt die UDF in 'C:\Programme\AutoIt\Include\'.
Außerdem ist die Zeile 10 überflüssig, oder was soll das zweite GUI ?
Ansonsten läuft das Script. Exe habe ich natürlich nicht und zeige mit deshalb an den Stellen nur das Kommando in einer MsgBox an.
-
-
... oder ohne so einen Array-Schnick-Schnack mit alter herkömmlicher Programmierkunst:
[autoit]$in = FileOpen("Eingabe.txt",0)
[/autoit]
$i = 1
While 1
$out = FileOpen("Ausgabe_" & $i & ".txt",1)
For $j = 1 to 100
$line = FileReadLine($in)
If @error = -1 Then ExitLoop 2
FileWriteLine($out,$line)
Next
FileClose($out)
$i += 1
Wend
FileClose($in) -
Mein Vorgehen wäre folgendes:
- öffne Eingangsdatei
- Datei Zeile für Zeile lesen (FileReadLine)und in eine $Variable (incl. angehängten CRLF) schreiben
- wenn betreffende Zeile (StringLeft($zeile,16) = "<entry name=""W"">") dann schreibe Standardzeile in $Variable
- schließe Eingangsdatei
- überschreibe Datei mit $VariableFertig....
-
Wenn Du ein Programm unter einem Account startest, der sich vom gerade eingeloggten User unterscheidet, würde die MsgBox auf dem Desktop vom User deines 'RunAsSet'-Kommandos erscheinen. Und die siehst Du nicht !
Bei den Diensten gibt es für diesen Fall eine Option die sich 'Datenaustausch zwischen Dienst und Desktop zulassen'. -
Und auch wenn es kein Text wäre, könnte man Bit für Bit in die Datei schreiben
Ist halt nur etwas komplizierter... -
Na gut, vielleicht hilft Dir dieses Beispiel. Nur einbauen muss Du es dann selbst....
Spoiler anzeigen
[autoit]#Include <GuiComboBox.au3>
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("ComboAddDir",400,300)
[/autoit] [autoit][/autoit] [autoit]
$Combo = GUICtrlCreateCombo("", 2, 2, 396, 296)
$Lesen = GUICtrlCreateButton("Lesen",20,30)
GUISetState(@SW_SHOW)_GUICtrlComboBox_AddDir ($Combo, @WindowsDir & "\*.exe")
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $Lesen
[/autoit]
Msgbox(0,"Ergebnis","Gewählt wurde : " & GUICtrlRead($Combo))
EndSwitch
Wend -
Man müsste erst einmal überlegen, was soll passieren, wenn das Programm zwischen dem 'Start' und dem 'Ende' geschlossen wird ?
Ansonsten : Schau hier... (Zeilen 10,11,22-24,33-35. Das hättest Du aber auch selbst geschafft, oder ?)
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("twb153", 550, 150)
[/autoit] [autoit][/autoit] [autoit]
$Datei = GUICtrlCreateInput("", 80, 48, 457, 21)
$Start = GUICtrlCreateButton("Start", 16, 16, 57, 25, 0)
$Lesen = GUICtrlCreateButton("Lesen", 16, 48, 57, 25, 0)
$Ende = GUICtrlCreateButton("Ende", 16, 80, 57, 25, 0)
$Loeschen = GUICtrlCreateButton("Inv.out Löschen" , 16, 112, 100, 25, 0)
$Alles = GUICtrlCreateButton("Alle .out Löschen" , 120, 112, 100, 25, 0)
GUICtrlSetState($Ende,$GUI_DISABLE)
GUICtrlSetState($Lesen,$GUI_DISABLE)
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Start
GUICtrlSetState($Start,$GUI_DISABLE)
GUICtrlSetState($Ende,$GUI_ENABLE)
GUICtrlSetState($Lesen,$GUI_ENABLE)
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe S")
Case $Lesen
If GUICtrlRead($Datei) <> "" Then
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe L " & GUICtrlRead($Datei))
EndIf
Case $Ende
GUICtrlSetState($Start,$GUI_ENABLE)
GUICtrlSetState($Ende,$GUI_DISABLE)
GUICtrlSetState($Lesen,$GUI_DISABLE)
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe A")
Case $Loeschen
If Not FileExists ("c:\inv_Dateien\inv.out") Then
MsgBox(1, "Datei", "Der Text in Zeile1" & @CRLF & "und der in Zeile 2")EndIf
[/autoit] [autoit][/autoit] [autoit]
If FileExists("c:\inv_Dateien\inv.out") Then
FileDelete("c:\inv_Dateien\inv.out")
[/autoit]
EndIf
Case $Alles
FileDelete("c:\inv_dateien\*.out")
EndSwitch
Wend -
Es geht einfacher:
Zeile 20 muss so lauten: ShellExecuteWait($path & $file)
Hatte ich auch schon geschrieben, bevor mein Editor die Grätsche gemacht hat. Und in der Version die ich anschließend neu schrieb, hab ich es vergessen
-
na dann so...
[autoit]$path = "\\Lennart\SharedDocs\Network\"
[/autoit]
$backup = @tempdir
If StringRight($path,1) <> "\" then $path &= "\"
While 1
$search = FileFindFirstFile($path & "*.*")
If $search = -1 Then
; keine Dateien gefunden
FileClose($search)
Sleep (1000)
Else
; wenn Dateien vorhanden, dann abarbeiten
While 1
$file = FileFindNextFile($search)
If @error Then Exitloop ; keine weitere Datei gefunden, innere Schleife verlassen
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(36, "Neue Datei gefunden!", "Es wurde eine neue Datei mit dem Namen " & $file & " gefunden!" & @CRLF & "Jetzt Ausführen ?")
Select
Case $iMsgBoxAnswer = 6
Sleep(1000)
ShellExecute($path & $file)
FileMove($path & $file, $backup, 9) ; Ordner wird ggf. erzeugt, alte Dateien überschrieben
Case $iMsgBoxAnswer = 7
FileMove($path & $file, $backup, 9) ; Ordner wird ggf. erzeugt, alte Dateien überschrieben
EndSelect
Wend
FileClose($search)
EndIf
Wend -
Habe ich das jetzt richtig verstanden:
- er wartet auf eine Datei (endlos)
- wenn Datei da dann ausführen
- wenn alle ausgeführt warten bis neue kommtDann müsste das Script sich ja merken welche schon ausgeführt wurde !
oder Möglichkeit 2:
- er wartet auf eine Dateien (endlos)
- wenn Datei da dann ausführen
- wenn ausgeführt dann löschen / verschieben
- wenn alle ausgeführt von vorne Anfangen -
War zum Teil mein Fehler, mit '$search' geht das natürlich nicht mehr, weil es der Rückgabewert der 'FileFindFirstFile'-Funktion ist. Ansonsten hättest Du dich nur an die AutoIt-Hilfe zu 'FileFindNextFile'-Funktion halten müssen.
So korrigiert könnte es klappen:
[autoit]$path = "\\Lennart\SharedDocs\Network\"
[/autoit][autoit][/autoit][autoit]If StringRight($path,1) <> "\" then $path &= "\"
[/autoit][autoit][/autoit][autoit]
$search = FileFindFirstFile($path & "*.*")
If $search = -1 Then Exit ; keine Datei gefunden
While 1
$file = FileFindNextFile($search)
If @error Then Exitloop ; keine weitere Datei
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(36, "Neue Datei gefunden!", "Es wurde eine neue Datei mit dem Namen " & $file & " gefunden!" & @CRLF & "Jetzt Ausführen ?")
Select
Case $iMsgBoxAnswer = 6
Sleep(1000)
ShellExecute($path & $file)Case $iMsgBoxAnswer = 7
[/autoit][autoit][/autoit][autoit]
; nix tunEndSelect
[/autoit]
WEnd -
FileFindNextFile übergibt nur den Dateinamen und keinen Pfad dorthin !
Also sollte Zeile 15 besser so aussehen:
ShellExecute (StringLeft($search,StringInStr($search,"\",0,-1)) & $file)
-
Eigentlich sollte man sich schon ein wenig Gedanken machen, wenn man ein Programm/Script haben möchte. Und wer Interesse am Programmieren hat, versucht es wenigstens ( auch wenn es dann schief geht ) !
hier mal einen Anfang wie es klappen könnte:
[autoit]#include <GUIConstants.au3>
[/autoit][autoit][/autoit][autoit]$Form1 = GUICreate("twb153", 550, 150)
[/autoit][autoit][/autoit][autoit]
$Datei = GUICtrlCreateInput("", 80, 48, 457, 21)
$Start = GUICtrlCreateButton("Start", 16, 16, 57, 25, 0)
$Lesen = GUICtrlCreateButton("Lesen", 16, 48, 57, 25, 0)
$Ende = GUICtrlCreateButton("Ende", 16, 80, 57, 25, 0)
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Start
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe S")
Case $Lesen
If GUICtrlRead($Datei) <> "" Then
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe L " & GUICtrlRead($Datei))
EndIf
Case $Ende
RunWait(@ComSpec & " /c " & @scriptdir & "\twb153.exe A")
EndSwitch
Wend -
Achtung: Exportierte Reg-Dateien ab Windows 2000, sind standardmäßig UNICODE !
Das heißt aus dem CRLF ( Hex '0d 0a' ) wird dann Hex '0d 00 0a 00'. Andere Zeichen
natürlich auch....