Hier ist ein Batch-Code ist die Liste der * .pst Dateien (keine Verzeichnisse), die unabhängig arbeiten an Zahl zu erhalten von * .pst-Dateien und deren Dateinamen, solange die Dateinamen mit .pst
enden.
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "skip=1 delims=" %%# in ('%SystemRoot%\System32\reg.exe query HKCU\Software\Microsoft\Office\15.0\Outlook\Search\Catalog 2^>nul') do (
set "RegData=%%#"
set "DelData=!RegData:*.pst=!"
if not "!DelData!" == "!RegData!" call :OutputFileName
)
endlocal
goto :EOF
:OutputFileName
set "RegData=!RegData:%DelData%=!"
echo !RegData:~4!
goto :EOF
* .pst-Dateien sind Outlook Personal Storage-Dateien, die Container-Dateien für E-Mails, Kontakte, ...
Der Befehl FÜR läuft Konsolenanwendung REG alle Werte der Registrierungsschlüssel abzufragen :
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search\Catalog
die Ausgabe auf Windows Vista und höher Windows-Versionen für das Beispiel ist:
012.351.
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search\Catalog
H:\PST\My Outlook Data File 1.pst REG_SZ whatever the
H:\PST\My Outlook Data File 2.pst REG_SZ data value is
C:\PST\My Outlook Data File 3.pst REG_SZ of each value
Es gibt die Registrierungsschlüssel und als nächstes die Registry-Werte jeweils eingerückt mit 4 Leerzeichen und mit 4 Leerzeichen zwischen Wertname und Werttyp und 4 Leerzeichen zwischen Werttyp und Datenwert.
Aber unter Windows XP die Ausgabe für das Beispiel ist:
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search\Catalog
H:\PST\My Outlook Data File 1.pst REG_SZ whatever the
H:\PST\My Outlook Data File 2.pst REG_SZ data value is
C:\PST\My Outlook Data File 3.pst REG_SZ of each value
So gibt es erste zwei Kopfzeilen vor dem Registrierungsschlüssel. Die Registrierungswerte sind ebenfalls mit 4 Leerzeichen eingerückt.Aber es gibt 1 oder mehr Registerkarten anstelle von Leerzeichen zwischen dem Wertnamen und dem Werttyp, und es gibt auch 1 oder mehr Registerkarten anstelle von Leerzeichen zwischen Werttyp und Datenwert.
Hinweis: Ich weiß nicht, ob REG_SZ
der richtige Registrierungswerttyp ist. Ich habe diesen Registrierungsschlüssel überhaupt nicht in meiner Windows-Registrierung und fügte daher nur die 3 Registrierungswerte als Zeichenfolge-Werte mit den Dummy-Zeichenfolgen hinzu.
Also der schwierige Teil ist, wie Sie den Namen des Registrierungswerts erhalten, der auch Leerzeichen enthält, um nur den Namen der * .pst-Dateien unabhängig vom Dateinamen zu erhalten.
Dies wird durch die Zuordnung jeder Ausgangsleitung mit Ausnahme der ersten Zeile wegen skip=1
auf Umgebungsvariable RegData
und erhalten neben dieser Linie alles nach .pst
auf Umgebungsvariable DelData
zugewiesen getan.
Wenn die Leitung .pst
auf jedem Fall enthält überhaupt was Wert nicht gleich DelData
Wert von RegData
ist, das Unterprogramm OutputFileName
wird zur Weiterverarbeitung und das Drucken des Dateinamen der Datei Pst * genannt.
In der Subroutine OutputFileName
wird zuerst die Zeichenfolge rechts von * .pst Dateiname von RegData
mit einer Zeichenfolge ersetzt. Der Name der nächsten * .pst-Datei wird ohne die vier Leerzeichen am Anfang ausgegeben.
Wenn die Anzahl der Einzug Leerzeichen nicht immer genau 4 Leerzeichen wäre, könnte die Zeile echo !RegData:~4!
durch folgenden Code ersetzt werden, um unabhängig von der Anzahl der Einzug Leerzeichen/Tabs zu arbeiten.
for /F "tokens=1*" %%I in ("%RegData%") do (
if "%%J" == "" (
echo %%I
) else (
echo %%I %%J
)
)
Die Verwendung von REG statt REGEDIT hat den Vorteil, dass keine erhöhte Privilegien eines Administrators für die Ausführung dieser Batch Code erforderlich ist.
Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
call /?
echo /?
for /?
goto /?
reg /?
reg query /?
set /?
setlocal /?
Wenn der Registrierungsschlüssel nicht vorhanden ist, wird nichts ausgegeben. Die Fehlermeldung zur Ausgabe der STDERR wird hier unterdrückt, indem sie mit 2^>nul
an Gerät NUL umgeleitet wird. Details finden Sie im Microsoft-Artikel Using command redirection operators.Der Umleitungsoperator >
muss ^
mit Caretzeichen entkam hier wird als Literalzeichen interpretiert wird auf die FOR Befehlszeilen Parsen und als Umleitungsoperator durch FüR auf der Ausführung der REG Befehlszeilen interpretiert.
Das Problem mit 'sein regedit' ist es Unicode-Textdateien standardmäßig erzeugt, die durch' cmd' zu handhaben ist nicht trivial; Benutzen Sie stattdessen den 'reg query'-Befehl ... – aschipfl
Hallo, darf ich fragen, warum Cmd für das, was hier getan werden soll, besser geeignet ist als Powershell? – sodawillow
@sodawillow Wenn ich cmd anstelle von Powershell verwenden würde, dann müssen keine Gruppenrichtlinienänderungen dafür vorgenommen werden. –