2016-12-16 44 views
0

嗨我想創建一個批處理文件查詢註冊表項,並根據其值,一個特定的程序是推出。查詢註冊表鍵值的數據,並使用「goto」和「if」基於輸出​​的值

我嘗試過各種來自互聯網的組合,但我似乎無法得到正確的行爲。

基本上,腳本將檢查定義當前DPI的regkey。根據該值,兩個程序中的一個將運行(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 

但它是行不通的。繼續收到「找不到密鑰或值」。 我試過的其他樣本最終都加載了這兩個腳本。 我明顯地設置了錯誤,但不知道它是什麼。

+5

您需要在您的REG QUERY中的%key%變量中加上引號。 'reg query「%Key%」/ v%Value%' – Squashman

+0

感謝@Squashman的回覆。不幸的是,這現在輸出另一個錯誤:'┬áset'不被識別爲內部或外部命令, 可操作的程序或批處理文件。 – FreelanceX

+0

@Squashman謝謝。在你的幫助下,我也回答了我自己的下面的問題('┬áset'是由於'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,如果您在自己的答案中發佈完整的腳本,則沒有理由不能將該答案標記爲correct_。 – Compo

0

利用@Squashman的解決方案,我也意識到自己在我的「set」命令之前有空格的錯誤,現在腳本按預期工作。