Ich habe Schwierigkeiten, den Wert eines Registrierungsschlüssels in eine Variable zu lesen. Der Registrierungswert kann Leerzeichen enthalten oder nicht. In diesem Fall versuche ich, SDK-Pfade nachzuschlagen.Lesen eines Registrierungswerts zu einer Stapelvariablen, die Leerzeichen in Wert behandelt
Es ist einfach, den Wert mit reg query
zu bekommen, aber es ist in einem bemerkenswert wenig hilfreich Format zurückgegeben:
C:\Users\Administrator\Desktop>reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKTools" /v InstallationFolder
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKTools
InstallationFolder REG_SZ C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\
Der Schlüsselname, Schlüsseltyp und Schlüsselwert wird durch eine Reihe von Räumen, nicht Tabulator getrennt.
Sie würden denken, dass Sie so etwas wie verwenden:
FOR /F "usebackq tokens=3* skip=2" %%L IN (
`reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKTools" /v InstallationFolder`
) DO SET sdkpath=%%L
... aber wenn der Schlüssel Leerzeichen enthält, wie in diesem Fall das Ergebnis auf der Kommandozeile emittiert wird:
C:\Users\Administrator\Desktop>SET sdkpath=C:\Program
Das ist nicht hilfreich. Es scheint keine Platzhaltervariable zu sein, um "Alle Übereinstimmungen" zu sagen. Und man kann nicht einfach schreiben:
DO SET sdkpath=%%L %%M
... denn wenn es nicht Leerzeichen im Pfad, dass ein wörtliches %M
produziert (und würde auch ein Leerzeichen erzeugen).
So. Gibt es eine Möglichkeit, diese einfache Sache in einer Batch-Datei zu tun?
Ich habe die meisten meiner Werkzeuge in Powershell (und einige Perl) geschrieben, aber ich muss eine Batch-Datei für die "einfache" Aufgabe call
in das Visual Studio/Windows SDK-Umgebungsskript und dann den Code aufrufen in vernünftigen Sprachen sobald die Umgebung eingerichtet ist.
Sie würden denken, dass nach 10 Jahren von cmd.exe
Existenz, und command.com
vor es wäre dies einfach. Hilfe?
(Ich kann Perl verwenden und die Win32::
Pakete der Registrierung abgefragt werden, aber es hilft mir, es in einen Stapel var erhalten nicht ...)
Win2k12 verwenden.
Ich habe gelesen:
und viele andere, aber keine handhaben die allgemeinen Fall korrekt einen Wert von einem Schlüssel zu lesen, ohne zu wissen, ob oder nicht es enthält Leerzeichen/wie viele.
Wow. Jetzt hasse ich Batch-Dateien mehr denn je. Aber vielen Dank. –