Назад | Перейти на главную страницу

Обнаружение раздела реестра с пробелом в пути из CLI (или файла .bat)?

Я столкнулся с проблемой, в которой мой опыт (и гугл-фу) меня подвел.

В принципе, мне нужно вытолкнуть KB968730 пару сотен клиентов или около того. Естественно, я хотел бы проверить установку исправления перед тем, как начать установку. К сожалению, мне нужно сделать это с помощью сценария и объекта групповой политики, а не с помощью такой системы, как SCCM. Обычно это не то, что вызывает у меня какие-либо проблемы, но, похоже, здесь есть загвоздка.

Загвоздка в том, что путь к разделу реестра, который устанавливает это исправление, имеет кровавое пространство. В частности, он устанавливается на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730.

Неудивительно, что стандартный командный файл / команда CMD reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730 выдает синтаксическую ошибку и портит часть проверки установки моего командного файла - он видит вторую часть пути в качестве второго аргумента. Итак, конечно, я попытался заключить путь в двойные кавычки, без радости. Одиночные кавычки, никакой радости. Угроза моей операционной системе и / или Microsoft также не дала результатов.

После некоторых поисков в Google и ругательств я нашел то, что кажется решением этой проблемы, но не могу заставить его работать, по какой-то причине я не могу понять. (Несомненно, потому что в наши дни мои навыки программирования слабы, а токенизация строк в лучшем случае вызвала у меня зацикливание.)

Похоже, я хочу использовать что-то вроде:

for /f "Tokens=2,*" %%a in (‘reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path’) do (set xpath=%%a) а затем работать с %xpath%, но это не работает. Установка токенов в 1 дает мне путь до пробела, установка на 2 дает мне путь после пробела, и я не могу понять, как добавить одно значение к другому. Особенно неприятно, так как все ответы, которые я видел, говорили: «Спасибо, сработало !!!» или похожие. * (С оговоркой, что вы удалите один % при выполнении непосредственно в командной строке.)

Кто-нибудь знает, что я здесь напортачил?

С другой стороны, если кто-то все еще использует VBS и знает, как это сделать, я бы с радостью выбрал этот вариант. (Однако нет PowerShell, потому что у нашего клиента XP он не установлен.)

PS, если это лучше подходит для StackOverflow, у меня нет проблем с его переносом, но моя первоначальная мысль заключалась в том, что «мы» не ценим разработчиков, которые приходят сюда и задают [нам] тривиальные вопросы о настройке своего разработчика. машины, поэтому я подумал, что они, вероятно, будут так же относиться к моему вопросу.

Двойные кавычки подходят для путей реестра, содержащих пробелы. Я только что протестировал здесь Windows XP SP3. Следующее возвращает ожидаемые ключи / значения:

REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"

Если вы хотите использовать токены, вам нужно использовать delims возможность указать не использовать пробел / табуляцию в качестве разделителя. Из FOR /?:

   delims=xxx      - specifies a delimiter set.  This replaces the
                     default delimiter set of space and tab.

Пример простой партии с использованием ; как разделитель.

FOR /F "usebackq delims=;" %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path`) DO (
    SET XPATH=%%A
)

Кроме того, вы можете найти wmic полезная полезность. Он поставляется с XP и для этого использует WMI. Вы можете быстро проверить свою КБ с помощью чего-то вроде:

wmic qfe list brief | FIND /I "KB968730"