1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. 20721

Beiträge von 20721

  • Stack Overflow

    • 20721
    • 3. August 2020 um 19:10

    Hallo Ihr beiden,

    ja das ich mit der Schleife ein Problem habe, ist mir ja bekannt.

    Hatte nur eine komplette Blockade wie ich da raus kommen oder wie man es einfacher lösen kann.

    Werde das Script von Mommbas morgen mal entsprechend testen und noch anpassen.

    Da ich gerade im Urlaub bin kann meine Rückantwort etwas dauern, aber sie kommt.

    Danke erstmal

  • Stack Overflow

    • 20721
    • 31. Juli 2020 um 12:44

    Hallo zusammen,

    ich benötige mal einen kleinen Schubs um mein Problem zu lösen.

    Ich habe ein Script erstellt, welches als Schleife laufen soll, soweit gut und fast schön.

    Aber nach einer gewissen Zeit bekomme ich die Fehlermeldung wie im Betreff.

    Ich grübel jetzt schon eine weile darüber, aber irgendwo habe ich eine Fehler drin, wo ich keine Lösung zu finde.

    Anbei mal das Script in der Hoffnung einer von hier findet die Lösung.

    Ist bestimmt nicht schwer aber ich habe nun keinerlei Idee mehr.

    Das Script soll lauf einem Server laufen und bei Bedarf PDF Dateien auf einen anderen Server verschieben, da meine User auf dem die PDF Dateien ankommen keinen Zugriff bekommen sollen.

    Diese werden über MFP Geräte als FDP Datei eingescannt.

    Bei dem Befehl FileMove habe die " eingefügt, sonst wären dort Smiles


    Spoiler anzeigen

    #include <array.au3>

    #include <File.au3>

    #include <WinAPIFiles.au3>


    kopieren()

    Func kopieren()

    $Quelle = "D:\Ordner\"

    $Ziel1 = "\\Server\D$\Verzeichnis\"

    $Ziel2 = "\\Server\D$\Verzeichnis1\Verzeichnis2"


    Local $PDF = _FileListToArrayRec($Quelle,"*.pdf", 1,1)

    For $i = 1 to UBound($PDF, $UBOUND_ROWS) - 1

    $Verzeichnis = StringSplit($PDF[$i],"\")

    $Zugriff = _WinAPI_FileInUse($Quelle&$PDF[$i])

    $byte = FileGetSize($Quelle&$PDF[$i])

    If $Zugriff = "1" OR $byte = "0" Then

    Else

    If $Verzeichnis[1] = "Allgemein" then

    "FileMove($Quelle&$PDF[$i],$Verwa&$Verzeichnis[2], 8)"

    Else

    "FileMove($Quelle&$PDF[$i],$Home&$Verzeichnis[1]&"\Scanner\"&$Verzeichnis[2], 8)"

    EndIf

    EndIf

    Next

    For $i = 1 to UBound($PDF, $UBOUND_ROWS) - 1

    _ArrayDelete($PDF, $i)

    Next

    pause()

    EndFunc

    Func pause()

    sleep(10000)

    kopieren()

    EndFunc

  • WinPESE

    • 20721
    • 14. August 2019 um 08:06

    Moin,

    danke Micha_he für den hinweis und Racer nochmal für die Erklärung.

    nun habe ich das ganze im 64bit Modus gemacht und siehe da es funzt so wie es soll.

    Jetzt geht es ins eingemachte.

  • WinPESE

    • 20721
    • 13. August 2019 um 14:37

    32bit kompiliert.

    Ich werde mal das ganze als 64bit kompilieren und sehen ob es dann läuft.

    Dism und diskpart stehen nur unter X:\windows\system32.

  • WinPESE

    • 20721
    • 13. August 2019 um 08:05

    Moin,

    hatte ich auch ausprobiert.

    Aber leider bleibt der Fehler weiterhin.

    Komisch ist auch wenn ich z.B. die dism.exe, welche ebenfalls nicht gefunden werden kann in das Verzeichnis X:\setup\ kopieren, kann ich diese auch ausführen bzw. er findet diese.

    Als ich das gleiche mit Diskpart.exe versucht habe bleibt das Programm hängt, sprich es startet und keine weitere Eingabeaufforderung.

    Vielleicht kennt einer die notwendigen Dateien um diskpart zu starten, so würde ich diese vorab entsprechend kopieren.

  • WinPESE

    • 20721
    • 12. August 2019 um 20:14

    Hallo,

    nach langem Probieren komme ich nicht mehr weiter und hoffe einer kann mir weiterhelfen.

    Ich habe mit mir dem WINPESE Builder ein ISO gebaut um unsere Rechner einfacher zu installieren.

    Zum Anfang habe ich alles über Batchdateien laufen lassen um die SSD entsprechend vorzubereiten und bin jetzt dabei das ganze in AutoIT zu packen mit einem entsprechenden GUI.

    Nun habe ich das Problem sobald ich versuche "diskpart" oder "dism" aus dem Script zu starten klappt es nicht.

    Nach langer suche bin ich darauf gestoßen das wenn ich eine DOS Fenster öffne komischer weise "diskpart" und "dism" nicht mehr im Verzeichnis C:\Windows\system32 finde. Sprich es ist nicht mehr vorhanden in dem Prozess.

    Wenn ich parallel ein DOS Fenster ohne AutoIT öffne kann ich die beiden Programme starten.

    Ich habe folgende Zeilen versucht, aber immer mit dem gleichen Problem.

    So sieht meine Zeile entsprechend aus.

    RunWait(@ComSpec & " /c " & "Diskpart /S" & @ScriptDir & "\Disk0.txt > Protokoll.txt", @ScriptDir)

    Auch wenn ich /c gegen /k austausche klappt es nicht. RunAsWait bringt ebenfalls keine Besserung.

    Hat jemand einen Tipp für mich.

  • _FTP_ListToArrayEx Problem

    • 20721
    • 22. Juli 2015 um 16:27

    Hallo autoBert,
    danke erstmal für die Antwort.
    Also ich habe nochmal alles durch gesehen was mein Script und die au3 Dateien betrifft ob ich was finden kann.

    Aber wie das zu manchmal ist, keine Fehler gefunden.

    Darauf hin haben ich AutoIt komplett einmal deinstalliert und die Version 3.3.8.1 neu installiert, was aber auch kein Erfolg brachte.

    somit habe ich notgedrungen die Version 3.3.14 installiert mit der SciTe 3.5.4.

    Siehe da plötzlich ging alles so wie ich es auch in meinem Script eingetragen habe.

    ich werde jetzt mal prüfen lassen ob ich die 3.3.14 nutzen kann ohne das unsere Virenscanner bei denn au3 sowie exe dateien Alarm schlagen.

    Bei einer Version wurden mir alle EXE ( ca. 80 Stk. ) gelöscht da angeblich Sicherheitsrisiko.

    Von daher werde ich die Anfrage mal schließen

  • _FTP_ListToArrayEx Problem

    • 20721
    • 22. Juli 2015 um 11:39

    Hallo zusammen,
    ich bin gerade dabei für unsere Mitarbeiter in unserer Firma eine kleines Script zu schreiben wo ich Dateiinformationen von einem FTP Server abfrage.
    Dazu muss ich _FTP_ListToArrayEx nutzen da ich neben den Dateinamen auch die Größe und das Datum abfrage.

    Und jetzt kommt das Problem bzw. ich weiß nicht ob ich was falsche mache oder es an der FTPEx.au3 liegt.

    Hier mal ein Script was ich zum testen genommen habe.


    C
    #include <FTPEx.au3>
    #include <Array.au3>
    #include <File.au3>
    $RemoteFile = "<Verzeichnis>"
    If ping(<IP>) > 0 Then
       $Open = _FTP_Open(<IP>)
      $Conn = _FTP_Connect($Open,<IP>, $FTP_user, $FTP_pass)
      _FTP_DirSetCurrent($Conn, $RemoteFile)
      $aFile = _FTP_ListToArrayEx($Conn,0)
      _ArrayDisplay($aFile)
      $File = Fileopen(@ScriptDir & "\Test.txt",2)
     _FileWriteFromArray($File, $aFile,1,0,";")
     _FTP_Close($open)
    Else
    EndIF
    Alles anzeigen

    Wenn ich das Script so laufen lasse bekomme ich auch alle Informationen geliefert

    Sprich: Datei oder Verzeichnisname, Dateigröße,Dateiattribut,Datum und Uhrzeit

    Und jetzt habe ich zwei Probleme

    1. Wenn ich bei _FTP_ListToArrayEx($Conn,0) den Parameter von 0 = Dateien und Verzeichnisse auf 1 oder 2 ändere bekomme ich ein leeres Array angezeigt
    2. Wenn ich die Testdatei öffne bekomme ich bei dem Parameter 0 das Datum und die Uhrzeit nicht mit ausgegeben, sondern die Ausgabe erfolgt wie unten.

    .;0;16
    ..;0;16
    L;0;16
    I;0;16
    G;0;16
    V;0;16
    CAAS;0;16
    MULTIHOS;0;16
    STD.TXT;0;32

    Sprich er schreibt mir keine Informationen über das Datum und Uhrzeit in die Textdatei.

    Wer kann mir verraten was ich falsche mache oder kann es sein das ich eine falsche FTEx.au3 habe.

    Die Programmversion von AutoIt lautet: 3.3.8.1

    Aus sicherheitstechnischen Gründen bin ich an dieser Version gebunden.

    Hier die Informationen zur FTPEx.au3 Datei

    ; #INDEX# =======================================================================================================================
    ; Title .........: FTP
    ; AutoIt Version : 3.3.7.20++
    ; Language ......: English
    ; Description ...: Functions that assist with FTP.
    ; Author(s) .....: Wouter, Prog@ndy, jpm, Beege
    ; Notes .........: based on FTP_Ex.au3 16/02/2009 http://www.autoit.de/index.php?page=Thread&postID=48393
    ; Dll(s) ........: wininet.dll
    ; ===============================================================================================================================

    Vielen Dank schon im Voraus für die Hilfe

  • Mail sende per Autoit

    • 20721
    • 21. November 2014 um 15:47

    Hallo BugFix,
    danke für die schnelle Antwort.
    klappt super, darauf wäre ich nie im Leben gekommen.

    Ihr seit hier echt super.

    Jetzt kann ich bmail auch abschalten.

  • Mail sende per Autoit

    • 20721
    • 21. November 2014 um 15:12

    Hallo zusammen,
    ich habe man eine Frage zu diesem Script und ob man meine Idee damit umsetzten kann.
    Das Script habe ich per Google mal gefunden und läuft auch ohne Probleme.

    [autoit]

    $SmtpServer = "" ; address for the smtp-server to use - REQUIRED
    $FromName = "" ; name from who the email was sent
    $FromAddress = "" ; address from where the mail should come
    $ToAddress = "" ; destination address of the email - REQUIRED
    ;$ToAddress = ""
    $CcAddress = ""
    $BccAddress = "" ; address for bcc - leave blank if not needed
    $Subject = "" ; subject from the email - can be anything you want it to be
    $Body = "" ; the messagebody from the mail - can be left blank but then you get a blank mail
    $AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
    $Importance = "HIGH" ; Send message priority: "High", "Normal", "Low"
    $Username = "" ; username for the account used from where the mail gets sent - REQUIRED
    $Password = "" ; password for the account used from where the mail gets sent - REQUIRED
    $IPPort = ; port used for sending the mail
    $ssl = ; enables/disables secure socket layer sending - put to 1 if using httpS
    ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

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

    ;##################################
    ; Script
    ;##################################
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
    If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
    EndIf
    ;
    ; The UDF
    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
    $objEmail.HTMLBody = $as_Body
    Else
    $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
    Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
    For $x = 1 To $S_Files2Attach[0]
    $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
    ;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
    If FileExists($S_Files2Attach[$x]) Then
    ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
    $objEmail.AddAttachment($S_Files2Attach[$x])
    Else
    ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
    SetError(1)
    Return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
    Case "High"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
    Case "Normal"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
    Case "Low"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
    SetError(2)
    Return $oMyRet[1]
    EndIf
    $objEmail=""
    EndFunc ;==>_INetSmtpMailCom
    ;
    ;
    ; Com Error Handler
    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
    EndFunc ;==>MyErrFunc

    [/autoit]

    Nun möchte ich Anstatt eine Datei als Anhang mit zu senden den Inhalt der Datei als Body haben.

    Derzeit mache ich das über bmail aber ich möchte gerne wenn es möglich ist alles aus einer Hand haben und nicht auf andere Programme zugreifen.

    Daher meine Frage an euch, ob sowas überhaupt machbar ist mit diesem Script.

    Versucht habe ich bereits die Datei in ein Array einzulesen und dies als Body auszugeben, aber leider ohne Erfolg.
    Ebenfalls die Textdatei als Body anzugeben verlief ohne erfolg.

    Es waren wie gesagt versuche, wobei ich mit schon gedacht habe das dieses schief geht.

  • _GUICtrlListView

    • 20721
    • 10. November 2014 um 16:15

    Hallo zusammen,
    man gut das man mal abschalten kann und nun habe ich eine Lösung gefunden.
    Vielleicht nicht die beste aber sie funzt.

    [autoit]

    $i = 0
    $Gesamt = 0
    While 1
    $Einzel = _GUICtrlListView_GetItemText($ListView2, $i,3)
    If $olaf = "" Then
    ExitLoop
    Else
    $Gesamt = $Gesamt + $Einzel
    EndIf
    $i = $i + 1
    WEnd
    If $Gesamt > 0 Then
    sleep(10000)
    _start()
    Else
    EndIf

    [/autoit]

    Aber danke für den Gedankenanstoß

  • _GUICtrlListView

    • 20721
    • 10. November 2014 um 13:07

    Hallo,
    leider habe ich erst heute Zeit das ganze mal zu testen
    @chip
    Vielleicht habe ich mich bei der Beschreibung etwas doof ausgedrückt.Die Summenberechnung soll erst dann stattfinden wenn alle Schleifen beendet sind und das ListView gefüllt ist.

    @'Kanashius
    Wenn ich deine func ins Script einbinde bekomme ich folgende Fehlermeldung
    .C:\SQL\SQL.au3(210,62)
    : ERROR: syntax error$Number+=int(_GUICtrlListView_GetItem($ListView2,$i,$column)[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

  • _GUICtrlListView

    • 20721
    • 5. November 2014 um 10:02

    Hallo zusammen,
    leider konnte ich was mein Problem betrifft keine Informationen finden, so das ich euch mal fragen wollte ob das möglich ist was mir vorschwebt und wie man das umsetzen könnte.

    Hintergrund:
    Ich habe ein Script geschrieben womit ich was super läuft, nach bestimmten Eingaben eine SQL Abfrage starte, das Ergebnis dieser Abfrage wird über ein Array dann an ein _GUICtrlListView weitergegeben.

    Ziel:
    Damit der Anwender nicht von sich aus diese Abfrage immer wieder neu starten muss, wollte ich ein Automatik einbauen die diese Abfrage alle 60 Sek. neu startet.

    Problem:
    Damit die Abfrage nicht in eine Endlosschleife läuft wäre es von meiner Seite aus sinnvoll die Summe einer Spalte zu berechnen und wenn diese = 0 ist soll der die Automatik abbrechen.
    Bei dem Inhalt der Spalten handelt es sich um Zahlen

    Da das Script etwas größer ist und Firmenintern hoffe ich das euch die Infos reichen die ich hier einstelle ohne das ich das Script erstmal umarbeiten muss.

    Die Spalten vom ListView sehen so aus, wobei ich die Summe der Spalte 4 benötige.

    $Listview2 = GUICtrlCreateListView("1", 2, 270, 600, 150)
    _GUICtrlListView_AddColumn($ListView2, "2", 50)
    _GUICtrlListView_AddColumn($ListView2, "3", 90)
    _GUICtrlListView_AddColumn($ListView2, "4", 90)
    _GUICtrlListView_AddColumn($ListView2, "5", 90)
    _GUICtrlListView_AddColumn($ListView2, "6", 90)
    _GUICtrlListView_AddColumn($ListView2, "7", 90)

    Die Werte werden mittels
    _GUICtrlListView_AddArray($ListView2, $aArray)
    vom Array das wie folgt aufgebaut ist in das ListView eintragen.

    _Array2DInsert($aArray, $Zeile_array, $eingabe&"|"&$String_Abt[2]&"|"&$String_Abt[4]&"|"&changeNumber(StringFormat('%.2f',$Summe0), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Summe1), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Summe2), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Diff), '.', ','))


    Bis auf die If Then Formel bin ich noch nicht weitergekommen.

    If <Prüfen ob die Summe > 0 ist> Then
    start()
    Else
    MsgBox(0,"text","Es wurden alle Werte verabreitet")
    EndIf

    Das wäre die Einfache Methode wenn sowas möglich ist, am liebsten wäre mir ein Countdown der Runterzählt im GUI wann die nächste automatische Aktualisierung laufen wird.

    Ich hoffe ich habe mich verständlich ausgedrückt, falls noch Infos fehlen einfach fragen.

  • SQL Abfrage

    • 20721
    • 3. September 2014 um 13:22

    Hallo AspirinJunkie,

    Das mit deiner Schleife klappt perfekt.

    Das mit den #include hatte ich noch aus alten Testzwecken, habe ich aber auch schon rasugenommen.

    Damti ist der Fall gelöst und ich bedanke mich.

  • SQL Abfrage

    • 20721
    • 3. September 2014 um 11:38

    Hallo zusammen,
    für meine Arbeit muss ich mich mit einen Oracle Server 11g verbinden und dort entsprechende Abfragen durchführen.
    Die Verbindung und eine abfrage bekomme ich auch hin aber wenn ich die Abfrage ausführe zeigt er mir immer nur den ersten Datensatz an, ich weiß aber das es wesentlich mehr Datensätze gibt.
    Das Programm was wir normalerweiße einsetzten kann ich nicht nutzten, da ich über 300 Abfragen hätte und eine Script schreiben das das Programm steuert geht auch nicht da ich das Script nachts laufen lassen müsste bei der Menge.

    Anbei das Script und ich hoffe das mir jemand weiterhelfen kann, was die Ausgabe betrifft.

    Spoiler anzeigen

    #include <sqlite.au3>
    #include <sqlite.dll.au3>
    #include <Array.au3>
    #include <mysql.au3>

    Local $avArray[3][3]


    $conn = ObjCreate( "ADODB.Connection" )
    $DSN = "Driver={Microsoft ODBC for Oracle};" & _
    "CONNECTSTRING=(DESCRIPTION=" & _
    "(ADDRESS=(PROTOCOL=TCP)" & _
    "(HOST="&$Host&")(PORT="&$Port&"))" & _
    "(CONNECT_DATA=(SID="&$SID&"))); Uid="&$User&";Pwd="&$PW&";"


    $conn.Open($DSN)
    $rs = ObjCreate( "ADODB.RecordSet" )
    $rs.open("select trunc(1a) 1, sum (2a) 2, 3a Zeichen from "TABELLE" where datum> '02.09.2014' group by trunc(1a), 3a order by trunc(1a)", $conn )

    $avArray[0][0] = $rs.Fields( "1" ).Value
    $avArray[0][1] = $rs.Fields( "2" ).Value
    $avArray[0][2] = $rs.Fields( "Zeichen" ).Value
    _ArrayDisplay($avArray)

    $conn.close


    Ich musste die Werte entsprechend verändern da es eine interen Abfrage ist.

    Es zeigt mir wie gesagt nur den ersten Datensatz an den er findet, er sollte aber alle Datensätze anzeigen wo das Datum größer als der 02.09.2014 ist.

    Muss ich noch eine entsprechende Schleife einbauen ?

    Die Abfrage würde ich dann gerne in eine Textdatei schreiben lassen bzw. zwecke einfacher Kontrolle in eine Array schreiben lassen.
    Das mit den Array habe och auch schon mal getestet und dabei hat er mir wie gesagt nur einen Datensatz angezeigt.
    Das mit der Textdatei klappt überhaupt nicht.

    Google konnte mir leider keine genauen Tipps geben, ich hoffe einer hier kann mir weiterhelfen.

  • FTP

    • 20721
    • 4. Juli 2013 um 09:30

    Hallo nochmal,
    da ich noch berichte erstellen muss und keine weiteren Scripte schreiben wollte, habe das Script entsprechend erweitert.
    Doch nun habe ich das Problem das er nicht mehr die 10 Verbindungen parallel aufbaut sondern wie vorher alle nach einander.
    Ich bin das SCript schon durchgegangen kann aber so keine Fehler feststelle.
    Bin vielleicht auch etwas Bild geworden in dem Script.
    Wenn mir jemand vielleicht ein Typ geben kann woran es liegen könnte oder was ich daran besser machen kann wäre ich dankbar.

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>
    #include <File.au3>
    #include <Date.au3>
    #include <Array.au3>
    If FileExists("D:\Automatik\RELEASE\Textdateien\status.ok") Then
    ; -------- Löschen nicht mehr benötigter Daten ------------------------------
    FileDelete("D:\Automatik\RELEASE\Temp\*.*")
    FileDelete("D:\Automatik\RELEASE\Berichte\*.*")

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

    ; -------- Erstellen des Datum für die Pflegeprotokolle
    $File = FileOpen("D:\Automatik\RELEASE\Temp\Tag.txt",2)
    If @WDAY = 1 Then
    $letzter_Tag = _DateAdd("D", "-2", _NowCalcDate());Sonntag
    Else
    $letzter_Tag = _DateAdd("D", "-1", _NowCalcDate());Dienstag und Donnerstag
    EndIf
    $Jahr = StringLeft(StringRight($letzter_Tag,8),2)
    $Monat = StringLeft(StringRight($letzter_Tag,5),2)
    $Tag = StringRight($letzter_Tag,2)
    $Datum_neu = $Tag&"."&$Monat&"."&$Jahr
    FileWrite($File, $Datum_neu)
    FileClose($File)

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

    ;----------- Parameter für das gesamte Script ---------------------------
    $Verteilerliste = FileOpen("D:\Automatik\RELEASE\Textdateien\Verteiler.txt",0)
    $nVerteiler = FileReadLine($Verteilerliste)
    $Modulstand = "TOSHIBA 4690 OS V6"
    $error = "F$"

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

    ;-- Prüfen ob es eine neue db460 gibt und erstellen des Verteilers ---------
    $Server = FileGetTime("S:\DB_4690\Export\AEND4690.txt",0,1)
    $Lokal = FileGetTime("D:\Automatik\Release\Textdateien\AEND4690.txt",0,1)
    If $Server > $Lokal Then
    Filecopy("S:\DB_4690\Export\AEND4690.txt","C:\Automatik\Release\Textdateien\AEND4690.txt",1)
    Else
    EndIf
    $aend4690 = FileOpen("D:\Automatik\Release\Textdateien\AEND4690.txt",0)
    $Verteiler = FileOpen("D:\Automatik\Release\Temp\"&$nVerteiler&".txt",2) ; <---- Wird jedesmal neu erstellt aus der $datei

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

    $Zeile = 1
    While 1
    $Liste_aend4690 = FileReadLine($aend4690,$Zeile)
    $String = StringSplit($Liste_aend4690,";")
    ; Verteiler = $String[7]
    ; BKZ = $String[3]
    If $Liste_aend4690 = "" Then
    ExitLoop
    EndIf
    If $String[7] = $nVerteiler Then
    FileWriteLine($Verteiler,$String[3])
    EndIf
    $Zeile = $Zeile +1
    WEnd
    FileClose($aend4690)
    FileClose($Verteiler)

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

    ;---------------------- Starten der Abholung --------------------------------
    Local $pid[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    Local $Liste, $Ziel, $i, $Fertig
    $Ende = FileReadLine("D:\Automatik\Release\Temp\"&$nVerteiler&".txt",-1)
    $Liste = FileOpen("D:\Automatik\Release\Temp\"&$nVerteiler&".txt",0)
    ; Eine Variable, die sagt ob alles abgearbeitet ist
    $Fertig = 0

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

    While Not $Fertig
    ; Die nächste Zeile einlesen
    $Ziel = FileReadLine($Liste)

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

    ; Wenn die Liste fertig ist, setzten wir die Variable.
    If $Ziel = "" Then
    $Fertig = 1
    EndIf

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

    Do
    ; Gehe die Liste der Arbeiterprozesse durch
    For $i = 0 To UBound($pid) - 1
    ; Am anfang oder wenn der zuvor gestartete Prozess fertig ist mit arbeiten,
    If $pid[$i] = 0 Or Not ProcessExists($pid[$i]) Then
    ; wird der nächste Eintrag der Liste gestartet
    If $Ziel <> "" Then
    ; Starte einen neuen Prozess
    FileCopy("D:\Automatik\Release\Scripte\Prüfen.exe","D:\Automatik\Release\Temp\"&$Ziel&".exe",1)
    $pid[$i] = Run("D:\Automatik\Release\Temp\"&$Ziel&".exe "&$Ziel)
    ; Damit wir wissen, dass dieses Ziel jetzt bearbeitet wird
    $Ziel = ""
    ExitLoop
    EndIf
    Else
    ; Sollte ein Prozess noch laufen, sind wir sicher noch nicht fertig
    $Fertig = 0
    EndIf
    Next
    ; Damit wir den Prozessor nicht zu arg belasten
    Sleep(5)
    ; Das ganze müssen wir so lange machen bis ein Prozess frei geworden ist und wir das nächste Ziel einlesen können
    Until $Ziel = ""
    WEnd
    FileClose($Liste)
    ProcessWaitClose($Ende&".exe")

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

    ;--------------------- Auswerten der Protokolle und den Bericht senden -------------------------
    $Bericht = FileOpen("D:\Automatik\RELEASE\Berichte\Protokoll.txt",2) ; <---- Wird jedesmal neu erstellt
    $Liste = FileOpen("D:\Automatik\RELEASE\Temp\"&$nVerteiler&".txt",0)
    $File = FileOpen("D:\Automatik\RELEASE\Temp\Tag.txt",0)
    $Datum_soll = FileReadLine($File)
    $aktiv_soll = "A"
    $error_soll = "0"

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

    ; Hier wird der Berichtskopf erstellt
    FileWrite($Bericht, "****************************************************************" & @CRLF)
    FileWrite($Bericht, "* Automatisches Protokolle für die Releaseanhebung *" & @CRLF)
    FileWrite($Bericht, "****************************************************************" & @CRLF)
    FileWrite($Bericht, "* " & @CRLF)
    FileWrite($Bericht, "* Pflegetabelle : "&$nVerteiler&@CRLF)
    FileWrite($Bericht, "* Pflegedatum : "&$Datum_soll&@CRLF)
    FileWrite($Bericht, "* Tagesdatum : "&@MDAY&"."&@MON&"."&@YEAR& @CRLF)
    FileWrite($Bericht, "* Pflegestatus : B " & @CRLF)
    FileWrite($Bericht, "* " & @CRLF)
    FileWrite($Bericht, "****************************************************************" & @CRLF)
    FileWrite($Bericht, " " & @CRLF)

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

    $zeile = 1
    While 1
    $BKZ = FileReadLine($Liste,$Zeile)
    If $BKZ = "" Then
    ExitLoop
    EndIf
    If FileExists("D:\Automatik\Release\Daten\P_"&$BKZ&".dat") Then
    $Daten = FileOpen("D:\Automatik\Release\Daten\P_"&$BKZ&".dat")
    $D_error = StringRight(StringLeft(FileReadLine($Daten, 3), 36),1)
    $D_Aktiv = StringRight(StringLeft(FileReadLine($Daten, 3), 55),1)
    $D_Datum = StringRight(StringLeft(FileReadLine($Daten, 5), 25),8)

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

    If $D_Datum <> $Datum_soll Then
    FileWrite($Bericht, " "&$BKZ&" Pflegetabelle falsches Datum" & @CRLF)
    FileWrite($Bericht, "--------------------------------------" & @CRLF)
    Else
    If $D_Aktiv = $aktiv_soll Then
    FileWrite($Bericht, " "&$BKZ&" Pflegetabelle Aktiv" & @CRLF)
    FileWrite($Bericht, "--------------------------------------" & @CRLF)
    Else
    If $D_error <> $error_soll Then
    FileWrite($Bericht, " "&$BKZ&" Pflegetabelle fehlerhaft" & @CRLF)
    FileWrite($Bericht, " Protokollauszug" & @CRLF)
    $Fehlerzeile = 1
    While 1
    $Fehler = StringLeft(FileReadLine($Daten,$Fehlerzeile),2)
    If $Fehler = "" Then
    ExitLoop
    EndIf
    If $Fehler = $error Then
    FileWrite($Bericht, " ------------------------" & @CRLF)
    FileWrite($Bericht, " "&FileReadLine($Daten,$Fehlerzeile-2)& @CRLF)
    FileWrite($Bericht, " "&FileReadLine($Daten,$Fehlerzeile-1)& @CRLF)
    FileWrite($Bericht, " "&FileReadLine($Daten,$Fehlerzeile)& @CRLF)
    EndIf

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

    $Fehlerzeile = $Fehlerzeile +1
    WEnd
    FileWrite($Bericht, "--------------------------------------" & @CRLF)
    EndIf

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

    EndIf
    EndIf
    Else
    FileWrite($Bericht, " "&$BKZ&" Markt nicht erreichbar oder keine Protokolldatei vorhanden" & @CRLF)
    EndIf
    $Zeile = $Zeile +1
    WEnd
    FileClose($Bericht)

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

    ;FileDelete("D:\Automatik\Release\mail\config\*.*")
    ;FileCopy("D:\Automatik\Release\mail\P_config_mail.xml","D:\Automatik\Release\mail\config\config_mail.xml")
    RunWait(@ComSpec & " /c " & "D:\Automatik\Release\mail\programm\mail_att.exe", "D:\Automatik\Release\mail\programm", @SW_MAXIMIZE)

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

    ;--------------------- Auswerten der Modulstände und den Bericht senden -------------------------
    $Modulstand = "TOSHIBA 4690 OS V6"
    $Modul = FileOpen("D:\Automatik\RELEASE\Berichte\Modulstand.txt",2) ; <---- Wird jedesmal neu erstellt
    $Liste = FileOpen("D:\Automatik\RELEASE\Temp\"&$nVerteiler&".txt",0)
    ; Hier wird der Berichtskopf erstellt
    FileWrite($Modul, "****************************************************************" & @CRLF)
    FileWrite($Modul, "* Automatisches Protokoll der Modulstände *" & @CRLF)
    FileWrite($Modul, "****************************************************************" & @CRLF)
    FileWrite($Modul, "* " & @CRLF)
    FileWrite($Modul, "* Pflegetabelle : "&$nVerteiler&@CRLF)
    FileWrite($Modul, "* Tagesdatum : "&@MDAY&"."&@MON&"."&@YEAR& @CRLF)
    FileWrite($Modul, "* Modulstand : TOSHIBA 4690 OS V6" & @CRLF)
    FileWrite($Modul, "*" & @CRLF)
    FileWrite($Modul, "****************************************************************" & @CRLF)
    FileWrite($Modul, "" & @CRLF)
    FileWrite($Modul, "Fehlerhafte Märkte " & @CRLF)
    FileWrite($Modul, "" & @CRLF)
    ; Abfrage nach den Modulständen innerhalb der Dateien
    $zeile = 1
    While 1
    $BKZ = FileReadLine($Liste,$Zeile)
    If $BKZ = "" Then
    ExitLoop
    EndIf
    If FileExists("D:\Automatik\Release\Daten\M_"&$BKZ&".dat") Then
    $Daten = FileOpen("D:\Automatik\Release\Daten\M_"&$BKZ&".dat")
    $CC = StringStripWS(StringRight(StringLeft(FileReadLine($Daten, 3), 28),18),3)
    $DD = StringStripWS(StringRight(StringLeft(FileReadLine($Daten, 18), 28),18),3)

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

    If $CC = $Modulstand AND $DD = $Modulstand Then
    Else
    FileWrite($Modul, " "&$BKZ&" Modulstände" & @CRLF)
    FileWrite($Modul, " CC: "&$CC& @CRLF)
    FileWrite($Modul, " DD: "&$DD& @CRLF)
    FileWrite($Modul, "-------------------------"& @CRLF)
    EndIf
    Else
    EndIf
    $Zeile = $Zeile +1
    WEnd
    FileWrite($Modul, "" & @CRLF)
    FileWrite($Modul, "****************************************************************" & @CRLF)
    FileWrite($Modul, "* Liste aller Modulstände der Verteilung *" & @CRLF)
    FileWrite($Modul, "****************************************************************" & @CRLF)
    FileWrite($Modul, "" & @CRLF)
    FileClose($Liste)
    $Liste = FileOpen("D:\Automatik\RELEASE\Temp\"&$nVerteiler&".txt",0)
    $Zeile =1
    While 1
    $BKZ = FileReadLine($Liste,$Zeile)
    If $BKZ = "" Then
    ExitLoop
    Else

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

    $wert = 1
    While 1
    $Moduldatei = FileOpen("D:\Automatik\RELEASE\Daten\M_"&$BKZ&".dat",0)
    $Modul_zeile = FileReadLine($Moduldatei,$wert)
    If $Modul_zeile = "" Then
    ExitLoop
    Else
    FileWriteLine($Modul,$Modul_zeile)
    EndIf
    $Wert = $Wert +1
    WEnd

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

    EndIf
    $Zeile = $Zeile +1

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

    WEnd
    FileClose("D:\Automatik\RELEASE\Berichte\Modulstand.txt")
    sleep(1000)
    ;FileDelete("D:\Automatik\Release\mail\config\*.*")
    ;FileCopy("D:\Automatik\Release\mail\M_config_mail.xml","D:\Automatik\Release\mail\config\config_mail.xml")
    sleep(1000)
    RunWait(@ComSpec & " /c " & "D:\Automatik\Release\Mmail\programm\mail_att.exe", "D:\Automatik\Release\Mmail\programm", @SW_MAXIMIZE)
    FileMove("D:\Automatik\RELEASE\Textdateien\status.ok","D:\Automatik\RELEASE\Textdateien\status.nok")
    Else
    EndIf

    [/autoit]
  • FTP

    • 20721
    • 28. Juni 2013 um 19:13

    Klappt perfekt, werde es mal auf einem W2K3 Server laufen lassen und die Verbindungen auf 50 erhöhen.

    Das einzige was ich noch gemacht habe ist die exe zum Aufbau der Verbindung vorher umkopieren und dann die Kopie starten.
    So kann ich bei Problemen die Verbindung genau abbrechen und müsste nicht alle stoppen.

    Sobald ich Zeit habe und die drei, ja es sind jetzt drei geworden, mal etwas umschreiben und hier posten.

  • FTP

    • 20721
    • 23. Juni 2013 um 18:59

    Hallo,
    meins muss wohl dann auch gesponnen haben.
    wollte das mit dem consolwrite einbauen und dachte mir einfach mal starte mal.
    und siehe da es klappt.

    DANKE
    wenn ich die Anzahl erhöhen will, brauch ich doch nur die Zeile

    [autoit]

    Local $pid[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    [/autoit]

    erhöhen oder nicht ?

    [autoit]

    Local $pid[20] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    [/autoit]
  • FTP

    • 20721
    • 22. Juni 2013 um 19:56

    Hallo,
    das Script läuft nun an aber bleibt beim ersten Prozess stehen und macht nicht weiter.
    Ich habe dein Script mal geändert da ich mal sehen wollte ob es vielleicht an der zweiten EXE liegt, wovon ich aber nicht ausgegangen bin, aber ich wollte die Prozess ID haben.

    [autoit]

    FileCopy("C:\Daten\AutoIt\Olaf.exe","C:\Daten\AutoIt\exe\"&$Ziel&".exe")
    $pid[$i] = Run("C:\Daten\AutoIt\exe\"&$Ziel&".exe " & $Ziel)
    MsgBox(4,"",$Ziel&$i)

    [/autoit]

    Er kopiert die Datei auch um und startet diese korrekt. in der MsgBox von Hauptscript bekomme ich die ID 12340 al Meldung angezeigt.
    Danach passiert nichts mehr, wenn ich die MsgBox vom anderen Script beende bleibt das Hauptscript im Pauseemodus und ich kann es dann übern TaskManager abbrechen.

    Sprich er startet einmal und geht dann in Wartemodus und bleibt dort.

  • FTP

    • 20721
    • 22. Juni 2013 um 16:34

    Hallo Shadowigor
    leider läuft sie nicht, da er 2 fehler ausgibt.

    Es fehlt ein WEnd vor FileClose, dieses habe ich gesetzt.
    Doch er will noch ein until für die Do Schleife.

    Habe aber leider keine Ahnung wo ich das ganze hin packen soll.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™