Нужна помощь в поиске причины этой неправильной пакетной команды - PullRequest
0 голосов
/ 13 ноября 2009
IF %processor_architecture% == AMD64 (SET querypath=hklm\software\x) ELSE (SET dsetquerypath=hklm\software\y)

FOR /F "tokens=* delims=\" %%G IN ('REG QUERY "%querypath%" 2^>NUL') DO ECHO %%G

Позвольте мне объяснить, что я пытаюсь выполнить с помощью этой пакетной команды. В основном есть инструмент, который устанавливается на hklm \ software \ x (на 32-битных окнах) и hklm \ software \ y (на 64-битных окнах).

Мне нужен точный путь к программному обеспечению из реестра. Кто мог бы сказать мне, является ли компьютер 32- или 64-разрядным, и предпринять соответствующие действия. Но сейчас каждый раз, когда я использую эту пакетную команду, она всегда возвращает путь как hklm \ software \ y.

Я не знаю, ПОЧЕМУ? Вот что мне нужно, чтобы сделать этот пакетный файл правильным.

Ответы [ 4 ]

2 голосов
/ 13 ноября 2009

РЕДАКТИРОВАТЬ: Я думаю, это может дать объяснение и решение вашей проблемы, а также в пакетном режиме:)

Пробелы вокруг == могут быть причиной вашей проблемы.

Вы фактически сравниваете значение %processor_architecture%[space] с [space]AMD64

Попробуйте:

IF %processor_architecture%==AMD64...

Если включены расширения команд, вы также можете сделать:

IF /I %processor_architecture% equ AMD64

(переключатель /I делает регистр нечувствительным к регистру)

1 голос
/ 13 ноября 2009

Работает, как и ожидалось, если AMD64 котируется:

set processor_architecture="AMD64"
IF %processor_architecture% == "AMD64" (SET querypath=hklm\software\x) ELSE > (SET  querypath=hklm\software\y)
echo querypath=%querypath%
0 голосов
/ 13 ноября 2009

Я думаю, вы становитесь жертвой явления, когда переменные расширяются / оцениваются, как только они читаются. Это хорошо обсуждается в блоге Раймонда Чена .

Также выполните поиск по "немедленному расширению" и "отложенному расширению".

0 голосов
/ 13 ноября 2009

Что по этому поводу:

ECHO processor_architecture="%processor_architecture%"
SET querypath=hklm\software\y
IF "%processor_architecture%" == "AMD64" SET querypath=hklm\software\x

Также обратите внимание, что у вас есть некоторые опечатки на вашей ELSE детали; не проблема ли там?

...