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.
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.
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.
Ich glaub das hat irgendetwas mit dem for Befehl zutun, bin da leider zu keinem Sinnvollen Ergebnis gekommen.
Mit freundlichen Grüßen
Zendara
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144567
Url: https://administrator.de/contentid/144567
Ausgedruckt am: 08.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
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 :
nach dem Value "001e6700" durchsuchst?
Gruß
LotPings
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"
Gruß
LotPings
Schön wenns klappt,
du brauchst eigentlich keine Temporären Dateien wenn du die gefundenen Werte sowieso weiterverarbeiten willst.
Gruß
LotPings
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
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">
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:
Grüße
Biber
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
Hallo Biber,
das ist sicher die bessere Lösung, mein Tipp war ja auch mehr ein Schuß ins blaue
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
das ist sicher die bessere Lösung, mein Tipp war ja auch mehr ein Schuß ins blaue
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