2016-12-16 11 views
0

Привет Я пытаюсь создать пакетный файл, который запрашивает ключ реестра и на основе его значения, определенная программа запущен.Запросить данные значения ключа reg и использовать «goto» и «if» для вывода базы по указанному значению

Я пробовал различные комбинации из Интернета, но я не могу получить правильное поведение.

В основном сценарий проверяет ключ regkey, который определяет, что такое текущий DPI. Основываясь на значении, запускается одна из двух программ (сценарии PowerShell), которая, в свою очередь, запускает окно InternetExplorer.Application с определенными ограничениями размера.

Источники:

То, что я получил до сих пор это:

@echo off 
setlocal 
set "Key=HKCU\Control Panel\Desktop\WindowMetrics" 
set Type=REG_DWORD 
set Value=AppliedDPI 

set Data= 
for /f "tokens=2,3" %%a in ('reg query %Key% /v %Value% 2^>NUL ^| find /i "%Value%"') do (
 set TestType=%%a 
 set Data=%%b 
) 
if /i "%Data%"=="0x60" goto Data_96 
if /i "%Data%"=="0xc0" goto Data_192 
if /i not "%TestType%"=="%Type%" goto :Data_Missing 
goto Data_Undefined 

:Data_96 
echo Data is "%Data%". 
goto 96 

:Data_192 
echo Data is "%Data%". 
goto 192 

:Data_Missing 
echo Key or value not found. 
goto leave 

:Data_Undefined 
echo No action for data "%Data%" defined. 
goto leave 

:96 
powershell.exe -ExecutionPolicy Unrestricted -File somescript1.ps1 
goto leave 

:192 
powershell.exe -ExecutionPolicy Unrestricted -File somescript2.ps1 
goto leave 

:leave 

Но это просто не работает. Продолжайте получать «Key или Value not found». Другие образцы, которые я пробовал, загружают оба сценария. Я, очевидно, установил что-то неправильно, но не уверен, что это такое.

+5

Вам нужно поставить кавычки вокруг переменной% key% в REG QUERY. 'reg query"% Key% "/ v% Значение%' – Squashman

+0

Спасибо за ответ @Squashman. К сожалению, теперь это приводит к еще одной ошибке: «┬set» не распознается как внутренняя или внешняя команда, операционная программа или командный файл. – FreelanceX

+0

@Squashman Спасибо. С вашей помощью, а также отвечая на мой собственный следующий вопрос («┬set» был из-за «набора», имеющего пробел перед ним), я теперь получил его на работу! Спасибо! – FreelanceX

ответ

0

Здесь для вашей информации, это скрипт, который должен сделать то же самое:

@Echo Off 
Set "PSS=" 
For /F "Tokens=1,3" %%A In (
    'Reg Query "HKCU\Control Panel\Desktop\WindowMetrics" /v AppliedDPI' 
) Do If /I "%%A"=="AppliedDPI" (If %%B Equ 96 Set PSS=somescript1.ps1 
    If %%B Equ 192 Set PSS=somescript2.ps1) 
If defined PSS powershell -ExecutionPolicy Unrestricted -File "%PSS%" 

Он использует тот факт, что операторы не волнуют, если значения шестигранные или decimial.

+0

Благодарим вас за ответ. Но теперь я скомпилировал скрипт, скомпилировал и завернул его в установщик. Так как это работает, я не буду возиться с ним в обозримом будущем. Цените свое время. – FreelanceX

+0

Это не проблема, поскольку я сказал, что это для вашей информации. _BTW, если вы отправляете свой завершенный скрипт в свой собственный ответ, нет причин, по которым вы не можете пометить этот ответ как правильный_. – Compo

0

С решением от @Squashman, а также осознавая свою собственную ошибку, имея пробелы перед моими «установленными» командами, сценарий теперь работает по назначению.