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. daMeier

Beiträge von daMeier

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 14:08

    Hey,

    ja sorry, vor lauter lauter...

    Code funktioniert jetzt so.


    AutoIt
    For $i = $Array[0] To 1 Step -1
    	  If StringLeft($Array[$i], 1) = "s" Then
    		 $Array[$i] = StringLeft($Array[$i], 8)
    	  Else
    		 _ArrayDelete($Array, $i)
    	  EndIf
       Next

    Einzig was ich noch nicht weiß, im Original sind es 802 Zeilen, was ja auch im $Array[0] steht. Nach dem löschen sind es nur noch 577 Zeilen, in $Array[0] steht aber immer noch 802. Wenn ich jetzt mit dem Array weiter arbeite wird er im besten fall bei 802 anfangen und 300 ohne Wert machen oder er bringt mir einen Fehler???

    Ist das egal? Wie kann ich das richtig machen?

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 12:44
    AutoIt
    For $i = $aArray[0] To 1 Step -1
    	  If StringLeft($Array[$i][1], 1) = "s" Then
    		 $Array[$i] = StringLeft($Array[$i], 8)
    	  Else
    		 _ArrayDelete($Array, $i)
    	  EndIf
       Next

    kommt leider auch ein fehler:

    Variable used without being declared.:
    For $i = $aArray[0] To 1 Step -1
    For $i = ^ ERROR

    ist aber declariert:

    Local $i

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 12:34

    Sorry, der Fehler ist:

    Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    If StringLeft($Array[$i][1], 1) = "s" Then
    If StringLeft(^ ERROR

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 12:14

    hey,

    komme nur teilweise klar ... :)

    AutoIt
    For $i = 1 To $aArray[0]
    	  If StringLeft($aArray[$i][1], 1) = "s" Then
    		 $aArray[$i] = StringLeft($aArray[$i], 8)
    	  Else
    		 _ArrayDelete($aArray, $i)
    	  EndIf
       Next

    Dachte so würde er prüfen ob die erste Stelle in der Zeile ein "s" ist und würde dann diese auf 8 stellen "beschneiden", wenn nicht würde er diese Zeile löschen.

    Aber leider gefällt was am IF StringLeft nicht ... weiß aber nicht wo mein Denkfehler ist...

    wo bin ich den auf dem Holzweg?

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 11:01

    Hallo,

    ich bleibe mal beim Beispiel mit dem Umweg über die Datei.

    Das laden ins Array funktioniert. Im Array steht dann.

    Row|Col 0
    [0]|802
    [1]|Usage data is 8 minutes old. Next update in 8 minutes.
    [2]|
    [17]|e1234567 XDT_PLT_UD 2018.1231
    [18]|e1231224 XDT_PLT_UD 2018.1231

    Der erste Buchstabe ist immer e und dann kommen immer 7 Zahlen. Wenn in der Arrayzeile an stelle 1 kein e steht, soll er die ganze zeile löschen und wenn dort ein e steht, soll er nur e und die 7 Zahlen in die gleiche Zeile schreiben.

    Hoffe das ist verständlich? Ich habe noch keinen Code, weis keinen Ansatz.

  • Daten aus einem DOS Fenster in ein Array übertragen und bearbeiten

    • daMeier
    • 25. Juli 2017 um 10:37

    Hallo,

    ich brauch mal wieder Hilfe.

    Genaugenommen habe ich gleich mehrere Baustellen.

    Aktuell übergebe ich einen Befehl von AutoIt zur Kommandozeile von windows mit RunnWait. Dieser Befehl generiert eine Liste, diese würde ich gerne direkt in ein Array in AutoIT schreiben, da ich das nicht hinbekommen habe, speicher ich es in eine txt-Datei und lade diese ins Array.

    Würde diesen Zwischen Schritt gerne einsparen.

    Nun im nächsten Schritt sind im Array 100te von Zeilen mit folgendem Inhalt:

    a04545454 DLX_DDDFLCX 16555
    a04547544 DLX_DDDFLCX 16555
    usw.

    Aus diesem Inhalt benötige ich nur den ersten Teil z.B. a04547544 kann ich im Array mit Strings arbeiten, wenn ja was wäre der richtige weg?

    Das wäre mal meine erster Schritt in diesem neuen Projekt.

    Ich hoffe mir kann jemand weiter helfen.

    Gruß

  • Nach dem Aufruf einer Schleife wieder zurück in die GUI

    • daMeier
    • 4. Juli 2017 um 15:20

    Hallo,

    vielen Dank, ContinueLoop war der Befehl der Befehle! :)

    Ich gebe dir recht, Funktionen wären schicker, aber so hab ich es hin bekommen.

    Else-Abzweigungen habe ich entfernt, unnötiges kann/soll/muss raus.

    Select/Switch werde ich mir mal anschauen, aber so funktioniert es jetzt wie ich möchte.

    Danke dir!

  • Nach dem Aufruf einer Schleife wieder zurück in die GUI

    • daMeier
    • 4. Juli 2017 um 11:32

    Hey,

    ja, der Code könnte helfen... Hatte ich auch vor. Hab ich aber vergessen.

    AutoIt
    ; Übergreifende Variablen erstellen
    Local $IPAdresse
    Local $PfadtxtDatei
    Local $PfadLogDatei
    Local $CMD
    Local $var
    Local $msg
    Local $Ping
    Local Const $varFileSelectFolder = ""
    
    
    ; Hier beginnt das Programm
    GUICreate("Windows Update Stand prüfen", 400, 500)
    $Label = GUICtrlCreateLabel("Dieses Programm, prüft einen oder mehrere Arbeitsplätze (aufgelistet in einer txt-Datei) über das Netzwerk auf ihren Windows Update stand." &@CRLF& "" &@CRLF& "***************************************************************************************" &@CRLF& "Dazu wird das Tool Microsoft Baseline Security Analyzer (MBSA) verwendet und muss vorab auf dem ausführenden Arbeitsplatz installiert werden." &@CRLF& "" &@CRLF& "- Auf den zu prüfenden Arbeitsplätzen muss der Dienst RemoteRegistry (Remoteregistrierung) auf Automatisch gestellt und gestartet sein." &@CRLF& "- Der Benutzer (Administrator) muss mit einem bekannten Kennwort anglegt und aktiviert sein." &@CRLF& "" &@CRLF& "***************************************************************************************" &@CRLF& "" &@CRLF& "Wählen Sie nun, ob Sie einen geziehlten Arbeitsplatz prüfen oder anhand einer txt-Datei mehrere Arbeitsplätze prüfen wollen." &@CRLF& "" &@CRLF& "" &@CRLF& "WICHTIG !!! Diese Programm muss als Administrator ausgeführt werden!!!", 25, 25, 350, 300)
    $Button1 = GUICtrlCreateButton("Einen Arbeitsplatz prüfen", 25, 320, 130, 30)
    $Button2 = GUICtrlCreateButton("Mehrere Arbeitsplätze prüfen", 25, 360, 150, 30)
    $Button3 = GUICtrlCreateButton("Beenden", 285, 445, 90, 30)
    
    
    GUISetState()
       while 1
    	  $msg = GUIGetMsg()
    	  Select
    		 Case $msg = -3
    			Exit
    ; Drücken des Button "Einen Arbeitsplatz prüfen"
    		 Case $msg = $Button1
    ; Zu überprüfende IP-Adresse abfragen und Info für das weitere vorgehen
    			$IPAdresse = inputbox("Windows Update Stand prüfen - Abfrage der IP-Adresse und Info für das weitere vorgehen", "" &@CRLF& "Bitte geben Sie die IP-Adresse des zu prüfende Arbeitsplatzes an." &@CRLF& "" &@CRLF& "Als nächstes wählen Sie den Speicherort für das Protokoll." &@CRLF& "" &@CRLF& "" &@CRLF& "" &@CRLF& "z.B. 192.168.178.1", "", "", 500, 215)
    			if @error = 1 Then
    			   Exit
    			Else
    			   EndIf
    ; Prüfen ob die IP-Adresse über das Netzwerk erreichbar ist
    			$Ping = Ping($IPAdresse, 250)
    			If $Ping Not Then
    			   MsgBox(0, "Windows Update Stand prüfen - Arbeitsplatz nicht erreichbar.", "Der Arbeitsplatz mit der IP-Adresse " &$IPAdresse &" ist nicht über das Netzwerk zu erreichen." &@CRLF& "" &@CRLF& "Bitte prüfen Sie ob der Arbeitsplatz eingeschaltet ist.")
    			   Exit
    			Else
    			   EndIf
    ; Pfad für Log Dateien auswählen
    			$PfadLogDatei = FileSelectFolder($varFileSelectFolder, "")
    			if @error = 1 Then
    			   Exit
    			Else
    			   EndIf
    ; Ausführen des MBSA Scripts für eingegebene IP-Adresse.
    			$CMD = "C:\PROGRA~1\MICROS~3\mbsacli /target "&$IPAdresse& " /u USERNAME /p PASSWORD /rd "&$PfadLogDatei& " /n OS+SQL+IIS+Password /qt /ia"
    			RunWait(@ComSpec & " /c " & $CMD)
    			MsgBox(0, "Windows Update Stand prüfen - Arbeitsplatz erfolgreich geprüft.", "Der Arbeitsplatz mit der IP-Adresse "&$IPAdresse &" wurde erfoglreich geprüft." &@CRLF& "" &@CRLF& "Die Protokolldatei zu diesem Vorgang finden Sie unter: "&$PfadLogDatei&"")
    			Exit
    ; Drücken des Button "Mehrere Arbeitsplätze prüfen"
    		 Case $msg = $Button2
    ; Infos zum weiteren vorgehen
    			$var = MsgBox(1, "Windows Update Stand prüfen - mehrere Arbeitsplätze prüfen", "Erstellen Sie bitte eine txt-Datei (Dateiname ohne Leerzeichen) in welcher Sie die zu überprüfenden IP-Adressen der Arbeitsplätze unter einander auflisten z.B." &@CRLF& "192.168.178.1" &@CRLF& "192.168.178.2" &@CRLF& "usw." &@CRLF& "" &@CRLF& "Wählen Sie im nächsten Fenster wo die Logdateien abgespeichert werden sollen." &@CRLF& "" &@CRLF& "Im darauf folgenden Fenster wählen Sie die txt-Datei in der die IP-Adressen der zu prüfenden Arbeitsplätze hinterlegt sind." &@CRLF& "" &@CRLF& "Alle Arbeitsplätze in der txt-Datei werden auf Verfügbarkeit über das Netzwerk (Ping) geprüft. Sollte ein Arbeitsplatz nicht erreichbar sein wird dieser nicht geprüft.")
    			if $var = 2 Then
    			   Exit
    			Else
    			   EndIf
    ; Pfad für Log Dateien auswählen
    			$PfadLogDatei = FileSelectFolder($varFileSelectFolder, "")
    			if @error = 1 Then
    			   Exit
    			Else
    			   EndIf
    ; txt-Datei mit den zu überprüfenden IP-Adressen auswählen
    			$PfadtxtDatei = FileOpenDialog("txt-Datei auswählen", @WindowsDir & "\", "Textdatei (*.txt)", 1 + 2)
    			If @error Then
    			   MsgBox(0, "Windows Update Stand prüfen - keine txt-Datei ausgewählt", "Sie haben keine txt-Datei ausgewählt. Bitte wählen Sie die txt-Datei in der die IP-Adressen der zu überprüfenden Arbeitsplätze hinterlegt sind.")
    			   Exit
    			Else
    			EndIf
    			Local $file = FileOpen("" &$PfadtxtDatei& "", 0)
    			While 1
    			   Local $line = FileReadLine($file)
    			   If @error = -1 Then ExitLoop
    ; Prüfen ob die IP-Adressen über das Netzwerk erreichbar ist
    			   $Ping = Ping($line, 250)
    			   If $Ping Not Then
    				  $CMD = "echo " &$line& " - offline >> "&$PfadLogDatei& "\Netzwerkstatus_Arbeitsplaetze.log"
    				  RunWait(@ComSpec & " /c " & $CMD)
    			   Else
    				  $CMD = "echo " &$line& " - online >> "&$PfadLogDatei& "\Netzwerkstatus_Arbeitsplaetze.log"
    				  RunWait(@ComSpec & " /c " & $CMD)
    			   EndIf
    			WEnd
    			FileClose($file)
    			MsgBox(0, "Windows Update Stand prüfen - Netzwerkstatus Arbeitsplätze.", "Der Netzwerkstatus der zu prüfenden Arbeitsplätze wurde überprüft und in eine Logdatei unter "&$PfadLogDatei& "\Netzwerkstatus_Arbeitsplaetze.log geschrieben.")
    ; Ausführen des MBSA Scripts für eingegebene IP-Adresse.
    			$CMD = "C:\PROGRA~1\MICROS~3\mbsacli /listfile " &$PfadtxtDatei& " /u USERNAME /p PASSWORD /rd "&$PfadLogDatei& " /n OS+SQL+IIS+Password /qt /ia"
    			RunWait(@ComSpec & " /c " & $CMD)
    			MsgBox(0, "Windows Update Stand prüfen - Die Arbeitsplätze wurden erfolgreich geprüft.", "Die Arbeitsplätze mit den IP-Adressen aus der txt-Datei unter ("&$PfadtxtDatei&") wurden erfoglreich geprüft." &@CRLF& "" &@CRLF& "Die Log Dateien zu diesem Vorgang finden Sie unter: "&$PfadLogDatei&"")
    			Exit
    		 Case $msg = $Button3
    			Exit
    	  EndSelect
       WEnd
    Alles anzeigen
  • Nach dem Aufruf einer Schleife wieder zurück in die GUI

    • daMeier
    • 4. Juli 2017 um 10:16

    Hallo,

    ich lese schon seit eingier Zeit in diesem Forum, habe auch bereits einige Hilfe hier gefunden und kleinere Scripte geschrieben. Leider sitze ich aktuell an einem Problem und komme nicht weiter.

    Grundsätzlich habe ich eine kleine GUI gebaut, die Text anzeigt und 3 Button zur Verfügung stellt.

    Button1 führt weiteren Code mit MSGBoxen und Schleifen usw. aus.
    Button2 ebenfalls, aber anderen Code
    Button3 Beendet das ganze Programm

    Wenn ich Button 1 oder 2 drücke und an einem Punkt des Code dann "Exit" auslöse, endet nicht nur dieser Code sondern auch die GUI.

    Ich würde gerne dann wieder in die GUI springen, die sogar bis dahin noch offen im Hintergrund steht. Auch wenn der Code von Button 1 oder 2 fehlerfrei fertig ausgeführt ist, schließt sich alles auch die GUI, die möchte ich aber stehen lassen und nur über ihren Button3 beenden.

    Könnt ihr mir weiter helfen?

    Gruß

  • mehrere Textdateien zusammenfügen

    • daMeier
    • 20. Februar 2017 um 15:37

    Es klappt nicht, bin nicht ansatzweise in der nähe einer Lösung :(

    Was kann ich bis her. Ich kann ein Array mit der Liste der txt-Dateien erstellen.

    C
    #include <File.au3>
    #include <Array.au3>
    
    
    Local $FileList = _FileListToArray("C:\Test" , "*.txt")
    If @error = 1 Then
        MsgBox(0, "", "Keine Ordner gefunden.")
        Exit
    EndIf
    If @error = 4 Then
        MsgBox(0, "", "Keine Dateien gefunden.")
        Exit
    EndIf
    Alles anzeigen

    diese Liste kann ich auch in eine Textdatei packen, aber wie ich der Schleife sage, sie soll das Array abarbeiten. Leider keine Ahnung.

    Wäre eine Detailliertere Hilfestellung möglich?

    Grundgerüste der Schleife Vielleicht, mit UBound angabe... bin grad echt überfragt...

    Gruß

  • mehrere Textdateien zusammenfügen

    • daMeier
    • 20. Februar 2017 um 12:26

    hat etwas gedauert, aber hab ich...

    jetzt habe ich ein array mit allen namen der vorhandenen txt. dateien im ordner.

    cool!

    Jetzt noch eine for schleife die anhand der Dateinamen aus dem Array eine txt Datei mit deren Inhalten erstellt...

  • mehrere Textdateien zusammenfügen

    • daMeier
    • 20. Februar 2017 um 11:57

    Schande über mein Haupt, wegen der Falschen Benennung... :)

    Hab mir Array angeschaut, wie kann ich dem sagen, er soll nur *.txt Dateien filtern, finde da keine Möglichkeit.

    Auch wie ich den Inhalt später in eine Textdatei bringe weiß ich nicht. Kannst du etwas ausführlicher werden?

    Gruß

  • mehrere Textdateien zusammenfügen

    • daMeier
    • 20. Februar 2017 um 10:51

    Hallo,

    ich bin im Forum und in der AutoIT welt neu und habe gleich eine Frage.

    Mit folgendem Code kann ich ja 2 Spezifische txt-Dateien in eine zusmamenfügen

    Code
    $file1 = "test1.txt"
    $file2 = "test2.txt"
    $newfile = "new.txt"
    FileWrite($newfile, FileRead($file1) & @CRLF & FileRead($file2))


    Ich würde jetzt aber gerne alle txt-Dateien die in einem bestimmten Ordner liegen in einer zusammenfügen. Habt hier hierfür eine Idee? Stehe gerade auf dem schlauch.

    Habe es auch mit RunWait und Dos versucht, das geht auch, aber er schließt mir dann das Dos Fenster nicht mehr und gibt im Script keine Rückmeldung das es erfolgreich war.


    Code
    Else
       $cmd = 'copy *.txt zusammengefasst.txt'
       RunWait('"' & @ComSpec & '" /k ' & $CMD, $sFileSelectFolder)
    EndIf


    Wäre cool ihr könnten mir Helfen.

    Gruß

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™