Hallo autoiter,
danke für den Tipp. Aufgrund dessen habe ich hier im Forum einen Beitrag gefunden der mich ein Stückchen weiterbringen wird, hoffe ich.
Grüße, Mitac
Hallo autoiter,
danke für den Tipp. Aufgrund dessen habe ich hier im Forum einen Beitrag gefunden der mich ein Stückchen weiterbringen wird, hoffe ich.
Grüße, Mitac
Hallo zusammen,
ich bräuchte mal euere Hilfe. Für die weitere Verarbeitung der Daten, benötige ich den Pfad wo sich die PST-Dateien befinden, der Name ist unwichtig.
Die Pfade sollen der Reihe nach, zu einer bestehenden ini (ab Zeile 21) hinzugefügt werden.
Mit dem Script lese ich die Pfade aus der Registry heraus. Es werden jedoch nur die zum Zeitpunkt registrierten PST-Dateien aufgelistet.
#include <Array.au3>
#include <Date.au3>
#include <File.au3>
Local $s[15], $r[15], $ss[15], $rr[15]
For $i = 1 To 15
$s[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Search\", $i)
;$x[$i][0] = $s[$i]
If @error <> 0 Then ExitLoop
If $s = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$r[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search\", $i)
;$x[$i][1] = $r[$i]
If @error <> 0 Then ExitLoop
If $r = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$ss[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Search\", $i)
;$x[$i][0] = $ss[$i]
If @error <> 0 Then ExitLoop
If $ss = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$rr[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Search\", $i)
;$x[$i][1] = $rr[$i]
If @error <> 0 Then ExitLoop
If $rr = "" Then
ContinueLoop
EndIf
Next
_ArrayAdd($s, $r + $ss + $rr)
Local $aArrayUnique = _ArrayUnique($s) ; Use default parameters to create a unique array.
;_ArrayDisplay($aArrayUnique, "$aArray Unique") ; Display the unique array.
$zz = UBound($aArrayUnique) - 1
For $j = $zz To 1 Step -1
If $aArrayUnique[$j] = "" or not FileExists($aArrayUnique[$j]) Then
_ArrayDelete($aArrayUnique, $j)
ElseIf FileExists($aArrayUnique[$j]) Then
$aArrayUnique[$j] = $aArrayUnique[$j]
Else
ContinueLoop
EndIf
Next
$ee = UBound($aArrayUnique) - 1
$aArrayUnique[0] = $ee
$sShortMonthName = _DateToMonth(@MON, $DMW_SHORTNAME)
$yr = @YEAR
$dy = @MDAY
$Snow = _NowTime(5)
$DT = $sShortMonthName & "_" & $dy & "_" & $yr & "," & $Snow
FileWrite(@DesktopDir & "\PstOst.txt", $DT & @CRLF & "File PST/OST file locations." & @CRLF & @CRLF)
For $t = 1 To UBound($aArrayUnique) - 1
FileWrite(@DesktopDir & "\PstOst.txt", $aArrayUnique[$t] & @CRLF)
Next
_ArrayDisplay($aArrayUnique, "Outlook Current PST/OST", "0:" & $ee, 80)
FileWrite(@DesktopDir & "\PstOst.txt", @CRLF & @CRLF)
Exit
Der Text ist wie folgt aufgebaut:
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail@gmail.com.ost
D:\Documents\Outlook-Dateien\iCloud Archive.pst
D:\Ordner\Orner1\Ordner2\Outlook-Dateien\iCloud Archive1.pst
F:\Ordner\iCloud Archive2.pst
G:\Ordner\Ordner1\Ordner2\Ordner3\Outlook-Dateien\iCloud Archive3.pst
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail1@gmail.com.ost
Die ini sieht so aus.
[Quellen]
1=d:\Documents\Desktop
2=d:\Documents
…
…
…
21=
22=
usw.
Mit folgendem Skript kann ich mir das Ergebnis anzeigen lassen, danach weis ich jedoch nicht weiter.
#include<File.au3>
#include <Array.au3>
$pString = FileRead(@ScriptDir & "\PstOst.txt")
$pPST = StringRegExp($pString, ".*pst", 3)
;~ MsgBox(64, "Ergebnis", $sString)
_ArrayDisplay($pPST)
Um auch die nicht registrierten PST-Dateien außerhalb Outlooks zu erkennen, verwende ich folgendes Skript.
DirCreate(@ScriptDir & '\Outlook')
RunWait(@ComSpec & " /c " & 'dir D:\*.pst /b /s >' & @ScriptDir & '\Outlook\Outlook.txt', "", @SW_HIDE)
$file1txt = FileRead(@ScriptDir & '\Outlook\Outlook.txt', FileGetSize(@ScriptDir & '\Outlook\Outlook.txt'))
$file1txtARRAY = StringSplit($file1txt, @CRLF, 1)
For $i = 1 To $file1txtARRAY[0]
Next
Zusätzlich wäre hier noch die Frage, wie man verhindern kann das der gleiche Pfad mehrfach in die Ini geschrieben wird.
Das Ganze sieht so aus:
D:\Documents\Desktop\Ordner\Kontakte\Kontakte.pst
D:\Documents\Outlook\Kopie von meinOrdner.pst
D:\Documents\Outlook\Outlook1 - Kopie.pst
D:\Documents\Outlook\Outlook1.pst
D:\Documents\Outlook\Outlsend.to.com-00000006.pst
D:\Documents\Outlook\Meine.pst
D:\Documents\Outlook-Dateien\gmail.com.pst
D:\Documents\Outlook-Dateien\iCloud Archive.pst
Für euch wird das alles kein Problem sein, für mich „Newbie“, stellt das alles eine riesen Hürde dar.
Fertiger Code ist herzlich willkommen.
Grüße, Mitac
Der Befehl ist mir bekannt.
Es geht mir vielmehr darum wie ich die Func _check() (erstes Posting) anpassen muss, damit er im zweiten Posting funktioniert.
Hilfreich wäre der komplette Code.
Mit dem folgendem Script werden die Ordner erstellt. Allerdings weis ich nicht wie ich die Größe von Start und Ziel überprüfen kann.
#Include <File.au3>
#include <Date.au3>
#include <Misc.au3>
#include '_FileCopyEx.au3'
#include <Date.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiStatusBar.au3>
#include <WinAPIFiles.au3>
Dim $goOut = 0
Global $iSectionCount = 2 ; Anzahl der Ordner
Global $aStartDir[$iSectionCount] ; Array für die Quellverzeichnisse erstellen
$Quell_LW = @UserProfileDir
$aStartDir[0] = @UserProfileDir & '\Desktop' ; <- Quellverzeichnis 1 (Index 0) festlegen
$aStartDir[1] = 'i:\Slike\_00000010\' ; <- Quellverzeichnis 2 (Index 1) festlegen
;~ $aSourceDir[2] = ''
;~ $aSourceDir[3] = ''
; ...
Global $aZielDir[$iSectionCount] ; Array für die Zielverzeichnisse erstellen
$Ziel_LW = "H:\"
$aZielDir[0] = $Ziel_LW & @UserName & '\Drive_C\Desktop' ; <- Zielverzeichnis 1 (Index 0) festlegen
$aZielDir[1] = $Ziel_LW & 'Datensicherung_' & @UserName & '\Drive_C\Slike' ; <- Zielverzeichnis 2 (Index 1) festlegen
;~ $aDestDir[2] = ''
;~ $aDestDir[3] = ''
; ...
For $iSection = 0 To $iSectionCount - 1 ; die einzelnen Quellverzeichnisse durchgehen
Global $sSourceDir = ($aStartDir[$iSection]) ; alle Dateien aus diesem Verzeichnis sollen kopiert werden
Global $sDestDir = ($aZielDir[$iSection]) ; die Quelldateien sollen (mit Unterverzeichnissen) in dieses Verzeichnis kopiert werden
Global $aSourceFiles[1], $aDestDir[1]
_FileCopyEx_CreateArrays($sSourceDir, $sDestDir, $aSourceFiles, $aDestDir, '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
If Not @error Then
Global $sLog = _FileCopyEx($aSourceFiles, $aDestDir, 16 + 8 + 2 + 1, 'Dateien kopieren...') ; hier erfolgt dann das kopieren
ConsoleWrite('Fehler: ' & @error & @CR)
ConsoleWrite($sLog & @CR)
EndIf
Next
Nein, die UDF macht es nicht.
Erstell doch die Ordner mittels DirCreate oder übernimmst das die UDF schon?
Eigentlich sollte die UDF das schon erledigen.
Dafür ist wenigstens der Wert 8 im dritten Parameter gedacht. @mitac100 du lässt dir ja den @error-Wert ausgeben. Vielleicht ist der ungleich Null? Wenn ja, dann kannst du prüfen, was der Rückgabewert der Funktion _FileCopyEx dir sagen möchte.
Hallo zusammen,
das Script funktioniert soweit wunderbar, jedoch werden keine Ordner im Ziellaufwerk erstellt.
Ich hoffe Ihr könnt mir weiterhelfen.
; Fragen zur Datensicherung
;_FileCopyEx
#Include <File.au3>
#include <Date.au3>
#include <Misc.au3>
#include '_FileCopyEx.au3'
Dim $Quell_Pf_[4][2] ; [n][0] = Pfad; [n][1] = gerundete Größe
Dim $goOut = 0
;Der Start-Wert ist die Zahl des ersten Ordners
$start = 0
;Der Ende-Wert ist die Zahl des letzten Ordners
$ende = 3
;~ ;Datumsoptionen
;~ $iWeekday = _DateToDayOfWeek(@YEAR, @MON, @MDAY)
;~ $sNewDate = _DateAdd('d', 0, _NowCalcDate())
;~ $sNewDate = StringReplace($sNewDate, "/", ".")
$Quell_LW = @UserProfileDir
$Quell_Pf_[0][0] = $Quell_LW & '\Desktop'
$Quell_Pf_[1][0] = $Quell_LW & '\Documents\'
$Quell_Pf_[2][0] = $Quell_LW & '\Downloads\'
$Quell_Pf_[3][0] = 'i:\Slike\_00000010\'
;Zielpfade anpassen
$Ziel_LW = "H:\"
$Ziel_Pf = $Ziel_LW & 'Datensicherung_' & @UserName& '\Drive_C\'
_check()
Func _check()
;Prüfung Ziellaufwerk vorhanden?
If FileExists($Ziel_LW) Then ;Prüfung Quellverzeichnisse vorhanden?
$tmp = 0
For $i = $start to $ende
If Not FileExists($Quell_Pf_[$i][0]) Then ;Fenster Quellordner fehlt
MsgBox(0, "Quellordner fehlt", "Der Ordner " & $Quell_Pf_[$i][0] & " existiert nicht. Bitte kontrollieren")
$goOut = 1
Else ;Speicherplatz ermitteln und runden
$Quell_Pf_[$i][1] = Round((DirGetSize($Quell_Pf_[$i][0])/1024 / 1024), 0)
$tmp +=($Quell_Pf_[$i][1]) ;Größe zusammenrechnen
EndIf
Next
If $goOut = 1 Then Exit ;Quellordner fehlt, dann Script beenden
$Ziel_LW_Gr_Ru = Round(DriveSpaceFree($Ziel_LW), 0)
;Funktion Größenvergleich der Quellverzeichnisse mit dem Ziellaufwerk
If $tmp > $Ziel_LW_Gr_Ru Then ;Fenster zu wenig Speicherplatz
Msgbox(0,"Zu wenig Speicherplatz vorhanden","Geben Sie mindestens " & $tmp - $Ziel_LW_Gr_Ru & " MB Speicherplatz auf " & $Ziel_LW & " frei")
Exit
Else ;Alles OK, Start-Info-Fenster einblenden
;SplashTextOn("Datensicherung Internet", "Sicherung läuft - Bitte warten", 250, 60, -1, -1, 0)
;Alles OK, Datensicherung beginnt
For $i = $start to $ende
Global $sSourceDir = $Quell_Pf_[$i][0] ; alle Dateien aus diesem Verzeichnis sollen kopiert werden
Global $sDestDir = $Ziel_Pf ; die Quelldateien sollen (mit Unterverzeichnissen) in dieses Verzeichnis kopiert werden
Global $aSourceFiles[1], $aDestDir[1]
_FileCopyEx_CreateArrays($sSourceDir, $sDestDir, $aSourceFiles, $aDestDir, '*') ; diese Funktion erstellt die Arrays für _FileCopyEx
If Not @error Then
Global $sLog = _FileCopyEx($aSourceFiles, $aDestDir, 16 + 8 + 2 + 1, 'Dateien kopieren...') ; hier erfolgt dann das kopieren
ConsoleWrite('Fehler: ' & @error & @CR)
;~ ConsoleWrite($sLog & @CR)
EndIf
Next
EndIf
EndIf
EndFunc ;==>_check
EXIT ;Scrpit beenden