zendara
Goto Top

Daten per Batch auslesen und weiterverarbeiten

Hallo,

ich versuche gerade per Batch, auf mehreren Computer (Win2000, WinXP) den aktuellen Speicherort der Outlook.pst auszulesen. Der Speicherort der PST Dateien ist nicht immer, im dafür vorgesehenen Ordner gespeichert.
Mit Office 2007 funktioniert der Auslesevorgang ohne Probleme.
reg query "HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\Open Find\Microsoft Office Outlook\Settings\Outlook-Datendatei erstellen oder öffnen\File Name MRU" /v Value >>"X:\Protokoll\pst_reg_%username%.txt"  

aber bei den Rechnern mit Office XP ist der Reg Pfad immer an unterschiedlichen Orten gespeichert zb.:

"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\8b9651257708ab4da0d8d43cd315ee4d
Der letzte Teil ändert sich immer (8b9651257708ab4da0d8d43cd315ee4d) und müsste als Variable ausgelesen und verarbeitet werden.


Um an diesen Eintrag zu kommen, verwende ich folgend Auszug.

set regkey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
set keyname=LastKey
set regtemp=c:\reg_temp_Office_Pfad.txt
reg query "%regkey%" /v %keyname% >>%regtemp%  

Der daraus entstandene Text:
__

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
LastKey REG_SZ Arbeitsplatz\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\8b9651257708ab4da0d8d43cd315ee4d


Nun würde ich gerne nur den letzten Teil (8b9651257708ab4da0d8d43cd315ee4d) auslesen und als Variable weitergeben.

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\%HIER_REIN%" /v 001e6700 >>"X:\Protokoll\pst_reg_%username%.txt"  

Ich glaub das hat irgendetwas mit dem for Befehl zutun, bin da leider zu keinem Sinnvollen Ergebnis gekommen.


Mit freundlichen Grüßen
Zendara

Content-ID: 144567

Url: https://administrator.de/contentid/144567

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

77559
77559 10.06.2010 um 14:23:54 Uhr
Goto Top
Hallo Zendara,

so ganz kann ich nicht nachvollziehen warum du über den Lastkey von Regedit gehst, würde das denn auf anderen Computern funktionieren?

Was passiert denn wenn du per brute force alle Subschlüssel von "..Profiles\Outlook \.." mit :
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook" /s |findstr /I "001e6700"
nach dem Value "001e6700" durchsuchst?

Gruß
LotPings
Zendara
Zendara 10.06.2010 um 15:18:39 Uhr
Goto Top
Hallo LotPings danke für die Antwort.

Stimmt das mit LastKey hätte nicht funktioniert und ging nur die dem einem Rechner bis zum Neustart.

Der Vorschlag von dir funktioniert wunderbar!

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook" /s |findstr /I "    001e6700" >>X:\test.txt  

Das Ergebnis:
    001e6700	REG_SZ	C:\Dokumente und Einstellungen\%USERNAME%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Outlook\Outlook.pst

Ich hat zwar jetzt je nach PC Doppeleinräge mit unterschiedlichen Pfaden, aber dem Problem komme ich auch noch auf die Spur.

Herzlichen Danke für deine Hilfe face-smile
Zendara
77559
77559 10.06.2010 um 16:31:25 Uhr
Goto Top
Schön wenns klappt,

du brauchst eigentlich keine Temporären Dateien wenn du die gefundenen Werte sowieso weiterverarbeiten willst.

Set "RegKey=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"  
For /f "tokens=1,2,*" %%A in (  
  'reg query "%RegKey%" /s ^|findstr /I "    001e6700" '  
) do (
  Echo Pfad gefunden: %%C
  Rem mach hier was auch immer mit dem Pfad
)

Gruß
LotPings
Biber
Biber 10.06.2010 um 18:19:16 Uhr
Goto Top
Moin Zendara und LotPings,

zwei kleine Anregungen hätte ich noch zu dem von LotPings geposteten Schnipsel.

1) Unter dem Registry-Zweig "HKCU\........Subsystem\Profiles" befinden sich zwar nicht unendlich viele Profile, aber oft mehr als eins.
Bei mir sind es z.B. 4 Profile -- aber eines von diesen ist hervorgehoben durch einen Aufkleber "defaultProfile", REG_SZ, direkt unterhalb von "HKCU..\Profiles"
Dort würde/wird sicherlich bei Zendara auch "Outlook" drinstehen (wenn kein/e Benutzer/in sein7ihr Defaultprofil geändert hat.)

Dennoch würde ich immer das "defaultProfil" suchen und nicht eines, das möglicherweise "Outlook" heißt...das ist wirklich nur ein frei wählbarer Name.


2) in den Daten, die unterhalb des Registry-Schlüssels "HKCU\...........\Profile\{defaultProfile} liebevoll zusammengeharkt sind befinden sich einige, die einfach zu lang für FindStr.exe sind. [ Zu lang bedeutet nicht meterlang, aber mehr als 100+x Zeichen, ich habe es nicht geprüft]
Das führt zu einem Fehler, der von FindStr.exe auf STDERR geschickt wird und folgende Ausgabe erzeugt:
<code type ="plain">
e:\schnipsel\LotPinxGetPSTpaths.cmd
FINDSTR: Zeile 16 ist zu lang.
FINDSTR: Zeile 17 ist zu lang.
FINDSTR: Zeile 21 ist zu lang.
FINDSTR: Zeile 54 ist zu lang.
FINDSTR: Zeile 54 ist zu lang.
Pfad gefunden: D:\Biber\Pst\Pers÷nlicher AltOrdner.pst
Pfad gefunden: C:\Dokumente und Einstellungen\Biber\Outlook\archive.pst
Pfad gefunden: D:\Biber\Pst\BibersPrivat.pst


Den auf STDErr geschickten FindStr-Fehler fange ich in der unteren zweiten FOR-Anweisung ab [dieses "^2^>nul" ist gemeint],
die nun doppelt so lange batchdatei sähe dann so aus:

@echo off & setLocal
Set "RegAllProfiles=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"  
For /f "tokens=1,2,*" %%A in (  
  'reg query "%RegAllProfiles%" /v DefaultProfile ^| findstr /i "defaultProfile" '  
) do (
  Echo DefaultProfile ist  %%C
  Rem mach hier was mit dem Profile...
  Set "RegDefaultProfile=%RegAllProfiles%\%%C"  
)
:: Rem Hier ggf  Fehlerbehandlung
If not defined RegDefaultProfile (echo Kein DefaultProfile gefunden) & goto :eof
For /f "tokens=1,2,*" %%A in (  
  'reg query "%RegDefaultProfile%" /s ^|findstr /I "    001e6700" ^2^>Nul'  
) do (
  Echo Pfad gefunden: %%C
  Rem mach hier was auch immer mit dem Pfad
)

Grüße
Biber
77559
77559 10.06.2010 um 19:34:35 Uhr
Goto Top
Hallo Biber,
das ist sicher die bessere Lösung, mein Tipp war ja auch mehr ein Schuß ins blaue face-wink
Eigentlich könnte man hier findstr durch find ersetzen, dann wirken die vorangestellten Leerzeichen auch, bei findstr hätten sie ohne /B keine Wirkung.

Gruß
LotPings