Чтение значения реестра в пакетную переменную, обработка пробелов в значении
Я изо всех сил пытаюсь прочитать значение ключа реестра в переменную. Значение реестра может содержать или не содержать пробелы. В этом случае я пытаюсь найти пути SDK.
Это легко получить значение сreg query
, но он возвращается в удивительно бесполезном формате:
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\
Имя ключа, тип ключа и значение ключа разделяются последовательными пробелами, а не символами табуляции.
Вы могли бы подумать, что вы можете использовать что-то вроде:
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
... но если ключ содержит пробелы, как в этом случае, результат, выданный в командной строке:
C:\Users\Administrator\Desktop>SET sdkpath=C:\Program
Что не полезно. Кажется, нет универсальной переменной, чтобы сказать "Все совпадения". И вы не можете просто написать:
DO SET sdkpath=%%L %%M
... потому что если естьне пробелы в пути, которые будут производить буквальное%M
(и также создаст завершающий пробел).
Так. Есть ли способ сделать эту простую вещь в командном файле?
Я написал большую часть инструментов в Powershell (и некоторых Perl), но мне нужно использовать командный файл для «простой» задачи:call
создание сценария среды Visual Studio / Windows SDK, а затем вызов кода на разумных языках после настройки среды.
Можно подумать, что через 10 с лишним летcmd.exe
существование иcommand.com
до этого это было бы легко. Помогите?
(Я могу использовать Perl иWin32::
пакеты для запроса реестра, но это не помогает мне получить его в пакетной переменной ...)
Использование Win2k12.
Я прочел:
Считать значение реестра, содержащее пробелы, используя командный файлShell скрипт для чтения реестра Windowsи многие другие, но никто не справляетсяобщий случай правильного чтения значения из ключа, не зная, содержит ли оно пробелы / сколько.