Versteht sich autoIt mit den geplanten Tasks nicht?

  • Hallo,
    ich habe hier einen Linux Fileserver wo viele Mitarbeiter über Samba unter Windows ihre Daten ablegen. Um Alte Daten die älter als 1 Monat sind zu archivieren, habe ich ein Script mit autoIt programmiert. Das Skript loggt jeden Abend den Zeitpunkt, wann das letzte Mal auf die Datei zugegriffen wurde. Das muss leider jeden Abend geschehen, da das Alter der Datei nicht aussagekräftig ist. Desweiteren wird bei der abendlichen Datensicherung jede Datei "angefasst" sodass der letzte Zeitpunkt des Zugriffes verfälscht wird. Dafür halt das AutoIt Script.

    Soviel zur Vorgeschichte. Da ich nun nicht jeden Abend um 20 Uhr das Skript von Hand starten möchte habe ich Windows Boardmittel genutzt und einen geplanten Task angelegt der die .exe ausführt. Augenschaeinlich funktioniert es auch. Aber nicht zu 100%. Es befinden sich ca. 4500 Dateien auf dem Server bzw. in dem Laufwerk worauf zugegriffen wird. Nach der abendlichen Auswertung werden Dateipfad + letzter Zugriffszeitpunkt in eine .csv-Datei geschrieben, die am nächsten Tag für die nächste Auswertung wieder eingelesen wird.

    Ist die Auswertung gelaufen wird das Ergebnis wieder in die Datei geschrieben. Wurde die .exe allerdings über den geplanten Task gestartet, so werden immer so 30-50 Dateien weniger in die .csv geschrieben, als vorhanden sind. So werden die vorhandenen Dateien von Tag zu Tag immer weiter reduziert! Starte ich die .exe manuell, ist alles einwandfrei! Keine fehlenden Dateien in der .csv!

    Das Skript läuft auf einem alten Server mit 800Mhz, die Auswertung dauert knapp 40 min. wenn es per geplanten Task gestartet wurde. Starte ich das Skript auf dem gleichen Server von hand dauerts ca. 6 Minuten. Wie kann das bitte sein?

    Hier mal das Skript (Beschreibung zu den einzelnen Zeilen stehen weiter rechts ;) :(

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <array.au3>
    #Include <Date.au3>

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

    ;Start: 1. September 2011

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

    $datumheute = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC ;Braucht man so formatiert für _DateDiff
    global $nichtloeschen = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\diese dateien nicht löschen.txt"
    global $log = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\log.txt"
    global $aNichtloeschen
    global $archiv = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\Archiv_30 Tage"
    global $io = 0 ;diese ariable dient zur temporären Speicherung einer information. siehe weiter unten.
    global $aAuswertung
    Global $auswertung = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\auswertung.csv"
    _FileReadToArray($nichtloeschen, $aNichtloeschen)

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

    if not FileExists($auswertung) Then ;Existiert die Auswertungsdatei noch nicht, dann...
    $aDateien = _GetFilesFolder_Rekursiv('.', -1, 0)

    for $k = 1 to ubound($aDateien) - 1
    $neu = StringTrimLeft($aDateien[$k], 2) ;Die Daten im Array werden für die Verarbeitung angepasst
    $aDateien[$k] = "\\yf7sltja\zentral\bnk\d_global" & $neu
    Next

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

    _filecreate($auswertung) ;Wird sie erstellt...
    dim $aAuswertung[ubound($aDateien)][2] ;Dann wird das Array der Größe des $aDateienarrays angepasst...
    for $c = 1 to ubound($aDateien) - 1 ;und anschliessend die Inhalte von einem Array ins andere übertragen
    $aAuswertung[$c][0] = $aDateien[$c]
    $aAuswertung[$c][1] = $datumheute ;schreibt nach der Erstellung das Datum von heute als letzter Zugriff...
    Next

    fileopen($auswertung, 2)
    for $b = 1 to ubound($aAuswertung) - 1
    FileWrite($auswertung, $aAuswertung[$b][0] & ";" & $aAuswertung[$b][1] & @CRLF) ;Schreibt Array in Datei *1
    Next
    fileclose($auswertung)
    Exit ;und das Skript wird dann beendet
    Else
    Global $h = FileOpen($auswertung, 0)
    Global $aAuswertung = _CSV2Array($h, Default, True, 1) ;Existiert die Datei bereits, wird diese in ein Array aufgenommen.
    _ArrayDelete($aAuswertung, ubound($aAuswertung)) ;Löscht den letzten Eintrag im Array, da dieser leer ist. Der wird von dem mit *1 markierten @crlf verursacht

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

    ;Vll. werden nicht alle Daten aus der auswertung.csv vom Vortag eingelesen!!!!!!!!!!!!!
    EndIf

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

    $aDateien = _GetFilesFolder_Rekursiv('.', -1, 0) ;Neue Dateien müssen ab hier nun dem vorhandenen Array hinzugefügt werden

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

    ;---------------------------------------------
    global $pfadtest = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\test.txt"
    FileOpen($pfadtest, 2)
    FileWrite($pfadtest, ubound($aAuswertung) & " Inhalt der eingelesenen Auswertung.csv" & @CRLF)
    For $i = 0 to ubound($aDateien) -1
    FileWrite($pfadtest, $aDateien[$i] & @CRLF)
    Next
    FileClose($pfadtest)
    ;~ MsgBox(1, "lala", "lala")
    ;---------------------------------------------

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

    for $k = 1 to ubound($aDateien) - 1 ;Wiederholtes vorbereiten der neu eingelesenen Daten für die Verarbeitung.
    $neu = StringTrimLeft($aDateien[$k], 2)
    $aDateien[$k] = "\\yf7sltja\zentral\bnk\d_global" & $neu
    Next

    for $i = 1 to ubound($aDateien) - 1
    $search = _ArraySearch($aAuswertung, $aDateien[$i]) ;Such in $aAuswertung (Der Auswertung vom Vortag) nach den Dateien die gerade neu nach $aDateien eingelesen wurden.
    if @error then ;Wird eine Datei nicht gefunden, dann wird @error gesetzt was bedeutet, dass die gerade gesuchte Datei neu ist.
    redim $aAuswertung[ubound($aAuswertung) + 1][2] ;Diese neue Datei wird nun dem Array $aAuswertung hinzugefügt
    $aAuswertung[ubound($aAuswertung) - 1][0] = $aDateien[$i]
    $aAuswertung[ubound($aAuswertung) - 1][1] = $datumheute ;Datei ist neu. Datum von heute wird als letzter Zugriffszeitpunkt gesetzt
    EndIf
    Next

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

    dim $altepfade[1] ;Array wo nachher Positionen der gelöschten Dateien reingeschrieben werden. Wird nachher für deren löschvorgang aus dem Array $aAuswertung benötigt
    for $a = 1 to ubound($aAuswertung) - 1 ;Datei für Datei wird durchgegangen, wann der letzte Zugriffszeitpunkt war
    if FileExists($aAuswertung[$a][0]) then
    $hFile = _WinAPI_CreateFile($aAuswertung[$a][0], 2, 2, 2, 4)
    $aTime = _Date_Time_GetFileTime($hFile)
    _WinAPI_CloseHandle($hFile)
    $letzterzugriff = _Date_Time_FileTimeToStr($aTime[1]) ;In der Variablen steht, wann das letzte Mal auf die Datei zugegriffen wurde
    $letzteUhrzeit = StringRight($letzterzugriff, 8) ;Da das letzte Zugriffsdatum + Uhrzeit falsch formatiert von der Funktion zurückgegeben wird, muss das vorher extrahiert werden
    $letzteDatum = @YEAR & "/" & stringleft($letzterzugriff, 5)
    if NOT $letzterzugriff = @error Then ;Ist die Datei zur Auswertung noch im Zugriff, gibt _Date_Time_FileTimeToStr @error zurück. ist das der Fall, wird die aktuelle Uhrzeit ins Array geschrieben
    if $aAuswertung[$a][1] = 0 Then ;Beim ersten Durchgang ist das Array noch leer, und muss daher noch mit Datum + uhrzeit gefüllt werden
    $aAuswertung[$a][1] = $letzteDatum & " " & $letzteUhrzeit
    Else
    $dif = _DateDiff("h", $letzteDatum & " " & $letzteuhrzeit, $datumheute) ;Steht im Array bereits was, wird das aktuelle Datum, mit dem letzten Zugriffsdatum verglich. Ist es z. B. heute um 15 Uhr gewesen, dann sind das
    if $dif < 16 Then ;waren 16h ;5 Std. unterschied gewesen, somit < 16. Letzter Zugriff wird ins Array geschrieben.
    $aAuswertung[$a][1] = $letzteDatum & " " & $letzteuhrzeit ;Ist die Diferenz größer, wurde zuletzt gestern gegen 23. uhr zugegriffen. Das alte Datum bleibt im Array bestehen
    EndIf
    EndIf
    else
    $aAuswertung[$a][1] = $datumheute
    EndIf
    Else
    ;~ MsgBox(1, "lala", $aAuswertung[$a][0])
    ReDim $altepfade[ubound($altepfade) + 1]
    $altepfade[ubound($altepfade) - 1] = $a ;schreibt den index von dem alten Pfad in das Array. Später können so die alten pfade aus dem Array dann gelöscht werden.
    EndIf
    Next

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

    ;------------------------------------------------
    global $pfadtest1 = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\altepfade.txt"
    fileOpen($pfadtest1, 2)
    ;~ _arraydisplay($altepfade)
    For $i = 1 to ubound($altepfade) -1

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

    FileWrite($pfadtest1, $aAuswertung[$altepfade[$i]][0] & @CRLF)
    Next
    FileClose($pfadtest1)
    ;------------------------------------------------

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

    ;~ _arraydisplay($altepfade)
    if ubound($altepfade) > 1 Then ;erst wenn min. ein Eintrag in dem Array vorhanden ist, wird der Löschvorgang gestartet. Ohne die Abfrage fürde es zu einem Bug kommen, der immer den ersten Eintrag im Array löscht was bedeuten würde, dass je Durchgang eine Datei aus dem Vergleich verschwindet
    for $c = 1 to ubound($altepfade) - 1 ;Löscht die nicht mehr vorhandenen Pfade aus $aAuswertung mithilfe von dem erstellten Array $altepfade, wo sich die Indexe der alten Pfade befinden
    _arraydelete($aAuswertung, $altepfade[$c])
    Next
    EndIf

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

    fileopen($auswertung, 2)
    for $b = 0 to ubound($aAuswertung) - 1
    FileWrite($auswertung, $aAuswertung[$b][0] & ";" & $aAuswertung[$b][1] & @CRLF) ;Schreibt Array in Datei
    Next
    fileclose($auswertung)

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

    FileOpen($log, 1)
    for $a = 0 to ubound($aAuswertung) - 1
    $dif = _DateDiff("D", $aAuswertung[$a][1], $datumheute) ;waren Tage nicht stunden ;Prüft die Diferenz in Tagen von dem letzten Zugriff bis heute
    if $dif > 30 Then ;waren 30 Tage ;Wurde die Datei die letzten 30 Tagen nicht benutzt, dann wird sie verschoben
    for $i = 1 to ubound($aNichtloeschen) - 1
    $find = stringinstr($aAuswertung[$a][0], $aNichtloeschen[$i]) ;Der Ordner der nicht gelöscht werden soll ( z. B. \\yf7sltja\...\ausbildung) wird in dem gerade aktuellen String gesucht
    if $find > 0 Then ;Wird er da gefunden, dann wird die Schleife verlassen. Mit der aktuellen Datei soll nichts passieren (soll nicht verschoben werden)
    $io = 0 ;Die eventuell auf 1 gesetzte Variable (in den vorherigen Durchläufen), wird hier weider zurückgesetzt, für den nächsten Durchlauf
    exitloop ;Es kann nun sein, dass ...Ausbildung... erst an 3 Stelle im Array steht. Ist das der Fall, wäre die Variable $io schon vorher 2 mal
    Else ;auf 1 gesetzt wurden, weshalb diese wieder auf 0 zurückgesetzt werden muss, damit das nächste IF diese richtig handelt und die Datei nicht "anfässt"
    $io = 1 ;Wurde der aktuelle String aus "nicht löschen" in dem aktuellen String aus $aAuswertung nicht gefunden, dann bedeutet das, das diese
    EndIf ;Datei verschoben werden kann. Die Variable $io wird auf 1 gesetzt. Datei kann verschoben werden!
    Next
    if $io = 1 Then ;Wird der String in dem Array der nicht zu löschenden Dateien/Ordner gefunden, wird mit dem nächsten Arrayeintrag weitergemacht
    ;~ MsgBox(1, "lala", "hat funktioniert")
    $struktur = stringmid($aAuswertung[$a][0], 33) ;Hier wird der Pfadname der Datei extrahiert...
    $del = FileMove($aAuswertung[$a][0], $archiv & "\" & $struktur, 8) ;war filemove(erstmal beibehalten) ;...damit bei dem Verschiebenvorgang die Ordnerhirarchie mit erstellt wird im Archiv
    if @error Then ;Gibt die Funktion ein Fehler zurück, ist die Datei nicht mehr vorhanden...
    _FileWriteLog($log, $aAuswertung[$a][0] & " Datei wurde bereits von User gelöscht" & @CRLF) ;...das wird dann in die Logdatei geschrieben, da der Löschvorgang vom User selber schon durchgeführt wurde...
    Else ;...und der Eintrag der heute noch in der auswertung.csv vorhanden war, wird mit dem Lauf am nächsten Tag gelöscht.
    _filewritelog($log, $aAuswertung[$a][0] & @CRLF) ;Ansonsten wird ein normaler Logeintrag geschrieben, mit dem Datum/Uhrzeit des Verschiebens
    EndIf
    $io = 0 ;Reset der Variablen für den nächsten Durchgang
    EndIf
    endif
    Next
    fileclose($log)

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

    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)

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

    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")

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

    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf

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

    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|"]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf

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

    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]

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

    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 3)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines

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

    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]
  • Hi,
    mal eine ganz andere Frage , wenn du schon einen Linux Fileserver hast , wieso löst du das ganze dann nicht mit Shell-Mitteln?
    Ein Shell-Skript und ein cronjob und du musst dir nicht mehr Gedanken über den Aufruf des Skripts machen.


    Ansonsten kann ich mir das auch nicht erklären , was hast du denn bei dem geplanten Task alles eingestellt?
    Wenn du dein Skript manuell ausführst , machst du das dann administrativ?

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Warum ich das nicht mit Linuxmitteln mache? Ganz einfach, ich kenne mich nicht damit aus :)
    Die Einstellungen: Ich habe den Task mit meiner Kennung, Adminrechte, angelegt. Ausgeführt wird er als "admin", so heisst der User, ein allgemeiner Admin. Dann nach dem Einrichten des Tasks wird sich abgemeldet und es wird ein Dummyuser angemeldet unter dem halt andere Dinge ausgeführt werden. So startet der Task ja einwandfrei, aber es kommt halt zu den besagten Fehlern.
    Versuchsweise habe ich den Task mal manuell unter meiner Kennung gestartet, was ja auch zu den besagten führte. Die Datei so ausgeführt habe ich ebenfals unter meiner Kennung - keine Verarbeitungsfehler.

  • Ich vermute schlicht, das der Dummyuser keine Berechtigung auf die SAMBA-Freigabe hat welche in dem Task bearbeitet wird. Wenn nun das Autoitscript startet verbindet sich der Rechner mit deinem Taskuser prüft die erste Datei wird wieder getrennt und dann mit dem Dummyuser verbunden. Und das ganze Spiel für jede Datei wieder von vorne. Und das die Dateien immer weniger werden dürfte denke ich an einem Timeout für die maximalen Sambaverbindugnen in Zeit X von seiten des Linuxservers sein.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Das wäre eine Erklärung, chip, wenn da nicht noch die eine Sache wäre: Das gleiche Phänomen taucht auch auf wenn ich - Adminrechte - mich an dem Server anmelde und den geplanten Task starte. Ich habe Zugriffsrechte auf alle Dateien. Dass der Dummyuser keine Zugriffsrechte hat, ist korrekt.

  • Hast du vielleicht in deinem Task eine "maximale Ausführungsdauer" eingestellt welche zu kurz ist? Das würde auch das vorzeitige abbrechen erklären.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Task beenden nach 6 Stunden. Er bricht ja nicht vorzeitig ab, das Skript läuft bis zum Ende. Am Ende wird in die auswertung.csv geschrieben, und das wird ja eindeutig gemacht. Daran sehe ich ja, dass Fehler bei der Verarbeitung aufgetreten sind, sprich Einträge einfach verschwinden.

  • Auch wenn es nicht zur Lösung direkt beträgt, befass Dich mit Linux :)
    Da vieles, was unter Win mit Bordmitteln kaum machbar und mit AutoIt/Powershell/VBS funktional wurde,
    unter Linux schon immer sehr komfortabel gewesen ist. --> Shellscripte :)

    Google nach: cron(tab -e), date, tar & chmod +x ( <-- dein Script ausführbar machen)
    vermutlich findest Du schon fertige Scripte weil Dein Wunsch nicht wirklich ungewöhnlich ist.

    Gruß Dietmar

    z.B.: http://www.jarrodgoddard.com/linux-web-host…-the-bash-shell

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Zitat

    Was für ein Wiederspruch in sich.


    ohne hier nen Flamewar loszutreten, hast Du Dich mal mit Datumsformatierungen unter DOS rumgequält
    und Dir dann neidisch die Möglichkeiten des Linux "date" Befehls angesehen.
    Nur weil Linux keine Maus benötigt ist es noch lange nicht unkomfortabel [PUNKT].

    Oder bei >5000 Dateien multiple Datumsänderungen (je Datei) vornehmen in unter 12sec in einer virtuellen Maschine mit nem sed Einzeiler...Fragen?
    Die Shell ist so mächtig, da hat Windows lange Zeit (und mit Bordmitteln schon gar nicht) nichts entgegen zu setzten gehabt.

    Wie gesagt.. will ihn ja nicht von AuoIt abbringen aber manchmal ist es schon praktischer mit den nativen Möglichkeiten zu arbeiten.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Du hast sicher Recht, Dietmar. Allerdings möchte ich das derzeit bestehende Problem zeitnah lösen. Mir erstmal allerhand Wissen über Linux aneignen dauert sicher etwas länger :)


  • Die Shell ist so mächtig, da hat Windows lange Zeit (und mit Bordmitteln schon gar nicht) nichts entgegen zu setzten gehabt.

    In dem Fall ist mächtig != komfortable. Denke du solltest dich mal mit diesen beiden Begrifflichkeiten etwas auseinander setzen ;). Btw. das DOS-Zeitalter ist schon seit XP im Grunde vorbei. Von daher sich darauf zu beziehen wirkt eher wie eine mangelte Windowskenntnis von deiner Seite aus. Und z.B. solche lächerlichen Sachen wie in crontab eine Leerzeile nach dem letzten Cron nenne ich nicht komfortabel sondern unnötiger Blödsinn. Aber das ist meine Meinung und will hier ja keinem Linuxfanboy sein Linux schlecht machen :rofl:

    P.s. es sagt ja schon vieles das alle größeren öffentlichen Einrichtungen die ganz stolz auf Linux umgestellt haben wieder zurück rudern weil es einfach zuviele Problem damit gibt. Linux ist und bleibt etwas für Bastler die mehr Zeit damit verbringen wollen etwas zum laufen zu bekommen als die Anwendung wirklich zu nutzen [PUNKT]

    P.P.s

    Einen großen Unterschied gibts übrigens zwischen Linux und DOS nicht beim Datum formatieren ;)

    Zitat


    Linux: date '+DATE: %m/%d/%y'
    DOS: %date:~-7,2%/%date:~-10,2%/%date:~-4%

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    3 Mal editiert, zuletzt von chip (13. März 2012 um 13:02)

  • Zitat

    Btw. das DOS-Zeitalter ist schon seit XP im Grunde vorbei. Von daher sich darauf zu beziehen wirkt eher wie eine mangelte Windowskenntnis von deiner Seite aus.


    Nö, ich vergleiche nur nicht Äpfel mit Birnen, mir ging es darum welche Werkzeuge praktisch immer da sind und wie funktionell diese sind.
    Und wenn ich nun Linux (Konsole) mit Windows + Scripting Tools (VBS WSH) vergleiche hinkt es imho etwas.
    Btw. den Linux date Befehl finde ich besser lesbar, wenn hast Du denn für den DOS Synthax wiederbelebt. :)

    Zitat

    Und z.B. solche lächerlichen Sachen wie in crontab eine Leerzeile nach dem letzten Cron nenne ich nicht komfortabel sondern unnötiger Blödsinn.


    Touche, solchen Blödsinn findet man sicher in beiden Welten. :)

    Es geht ja nicht um LinuxFanboy, klar ich nutze es aber aus einem bestimmten Grund. Ich versuche halt für das jeweilige Vorhaben das passende OS zu wählen.
    Und da komme ich auch oft gut ohne Windows aus. :)
    Jeder wie er mag, wollte ja nur daruaf hinaus, das sein Vorhaben mit (ba)sh im Prinzip Kleinkram ist und
    es sicher auch nicht unpraktisch ist sich etwas in dem Linux/Unix Umfeld auszukennen. Und das wäre sicher nen guter Einstieg.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Entschuldigt bitte das ich mich in dieser Grundsatz Diskussion einmische, aber Ditmar hat recht [PUNKT].

    im übrigen ist das nur ein Einzeiler.

    find /pfad -mtime +30 -exec rm {} \;

    in diesem Fall wird zwar gelöscht, aber man kann den RM Befehl natürlich durch tar ersetzen.
    Durch weiteres googlen findet man auch noch ganze Scripte die sich mit dem Thema befassen.

    Also ein kurzer download und als root in die crontab.
    Fertig.

  • Entschuldigt bitte das ich mich in dieser Grundsatz Diskussion einmische, aber Ditmar hat recht [PUNKT].

    In seiner Aussage das es mit Linux in dem Fall schneller geht ja. Aber in seiner Aussage, dass Linux komfortabler ist als Windows nicht[PUNKT UND AUSRUFEZEICHEN]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.


  • In meinen Augen ist Komfortabel, wenn ich mit wenig Aufwand erreichen kann was ich möchte.

    Und damit hast schon genau den richtigen Punkt genannt. Der Aufwand etwas unter Windows umzusetzen ist wesentlich geringer als bei Linux. Bei bei Linux ist selbst für kleine Sachen erstmal ein Studium von mehreren Stunden nötig um ja nirgendwo einen Eintrag zu vergessen und damit das System offen wie ein Scheunentor zu machen.

    Setze eine Benutzer an einen Windows-PC und in max einer Stunde kann das wichtigste um damit zu Arbeiten. Setze einen User vor eine Linux-Shell und selbst nach drei Stunden siehst noch die Fragezeichen in seinen Augen ;).

    Und das der Marktanteil von Linux seit 2006 (großflächige Umstellung in Unternehmen von Unix auf Linux) jährlich ständig zurückgeht zeigt das es bei der breiten Masse einfach nicht als Komfortabel angesehen wird.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Doch bestimmt gibt es eine Lösung,
    Bleibt die Frage welchen weg man geht?

    1. du könntest über einen bestimmten User auf eine Freigabe zugreifen die alle Strukturen abdeckt die du durchsuchen willst und dann dort mit der Programmierung anfängst.
    2. du kannst mit putty link auf den Server via scp als Root zugreifen (sofern root ein Password hat) oder ein User mit genug rechten auf die Daten Schreibend zuzugreifen.
    3. es gibt rsync damit könnte es auch gehen und wahrscheinlich am aller leichtesten. Aber man muss sich natürlich wieder mit einen Linux tool herumgeschlagen, aber das läuft dann dennoch unter Windows.

    Suche dir einen Weg aus und ich helfe dir Dabei.
    Ich würde dich aber auch bei einer Implementierung unter Linux direkt unterstützen.

  • Ich habe weiterhin das Gefühl, dass AutoIt sich nicht mit den geplanten Tasks versteht. Ich habe versucht eine andere Lösung für mein Problem zu finden, ohne das Skript neu schreiben zu müssen. Habe es letzendlich so gelöst, dass der geplante Task nun ein Skript startet, welches wiederum mein Auswertungsskript startet. Nachdem das Auswertungsskript aber nun angestoßen wurde, passiert nichts mehr. Ich habe es dann nach über einer Stunde abgebrochen. Starte ich das Skript welches das andere Skript startet von Hand, ist die Funktion einwandfrei und es wir fehlerfrei abgearbeitet.