// KSO_PASS.EXE // Programm zum Sichern beliebiger Daten #include "fileio.ch" #include "Appevent.ch" #include "Xbp.ch" PROCEDURE Main() LOCAL cPassFile := SubStr(AppName(),1,Len(AppName())-4) + ".txt" // Anweisungs.txt muss denselben Namen haben wie die EXE LOCAL CRLF := Chr(13)+Chr(10) LOCAL aText := Array(4) // 4-zeiliger Aufbau der Anweisung.txt-Datei LOCAL aWochentage := {"Samstag","Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"} LOCAL aFreitage // Directory-Daten LOCAL cZiel, cMonat, cRCText // Zur Vermeidung von Kollision verschiedener Sicherungen vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // Test: ist bereits die Datei cPassFile auf diesem PC ge”ffnet? nHandle := FOpen( cPassFile, FO_EXCLUSIVE ) IF nHandle = -1 //+ Die Datei ist bereits auf diesem PC ge”ffnet FClose(nHandle) msgbox("Es ist bereits ein SicherungsJob offen!"+CR+LF+"Bitte zuerst schlieáen, dann nochmal versuchen!") RETURN ELSE FClose(nHandle) ENDIF //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // holt den Text fr RunDLL aus cPassFile: vvvvvvvvvvvvvvvvvvvvvvvvvvvvv nHandle := FOpen( cPassFile, FO_READ ) cBuffer := Space(3000) nBytes := FRead( nHandle, @cBuffer, 3000 ) cText := AllTrim(cBuffer) FClose( nHandle ) IF CRLF$cText e1 := -1 FOR i=1 TO 4 a1 := e1+2 e1 := At(CRLF,cText,a1) aText[i] := SubStr(cText,a1,e1-a1) IF i<3 .AND. RAt("\",aText[i]) != len(aText[i]) aText[i] += "\" ENDIF NEXT ELSEIF Chr(13)$cText e1 := -1 FOR i=1 TO 4 a1 := e1+2 e1 := At(Chr(13),cText,a1) aText[i] := SubStr(cText,a1,e1-a1) IF i<3 .AND. RAt("\",aText[i]) != len(aText[i]) aText[i] += "\" ENDIF NEXT ELSEIF Chr(10)$cText e1 := -1 FOR i=1 TO 4 a1 := e1+2 e1 := At(Chr(10),cText,a1) aText[i] := SubStr(cText,a1,e1-a1) IF i<3 .AND. RAt("\",aText[i]) != len(aText[i]) aText[i] += "\" ENDIF NEXT ENDIF //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ IF AppKeyState(65553)==1 // die Strg-Taste gedrckt (65552 = shift, 65554 = alt) cWochentag = aWochentage[DoW(DATE())] // Vortag ELSE cWochentag = aWochentage[DoW(DATE())+1] // Wochentag ENDIF IF cWochentag == "Freitag" nWo := Int(Day(DATE())/7)+1 cWochentag += AllTrim(Str(nWo)) // Freitag wird im Monat getrennt gesichert ENDIF cZiel := cWochentag + "\" // die TagesSicherung (Freitag mit Nr. 1-5) cMonat := SubStr(DtoS(DATE()),1,4) + StrZero(Val(SubStr(DtoS(DATE()),5,2))-1,2,0) // fr die MonatsSicherung am ersten Tag des Folgemonats IF !FExists(aText[2] + cMonat, "D") RunShell( "/C MD "+aText[2] + cMonat ) cZiel := cMonat + "\" // wenn der erste Tag im Monat, dann die MonatsSicherung statt der TagesSicherung ELSEIF !FExists(aText[2] + cWochentag, "D") RunShell( "/C MD "+aText[2] + cWochentag ) ENDIF //+17.08.2020 18:04 vorsichtshalber abfragen: DO WHILE !FExists(aText[2] + SubStr(cZiel,1,Len(cZiel)-1), "D") msgbox("Zielverzeichnis existiert nicht. Nochmal ENTER drcken.") ENDDO IF ConfirmBox( AppDeskTop(), "durchfhren mit - abbrechen mit /", ; "Datensicherung von " + aText[1] + aText[3] + " nach " + aText[2] + cZiel, ; XBPMB_YESNOCANCEL, ; XBPMB_WARNING, ; XBPMB_DEFBUTTON3 ) = XBPMB_RET_YES cRCText := aText[1] + " " + aText[2] + cZiel + " " + aText[3] + " " + aText[4] err := RunShell( "/C ROBOCOPY " + cRCText,,.F. ) msgbox("Datensicherung von " + aText[1] + aText[3] + " nach " + aText[2] + cZiel + " erledigt.") ELSE msgbox("Datensicherung vor dem Start abgebrochen!") ENDIF RETURN