我寫了一個批處理文件(heavily influenced from answers to this question),它應該循環遍歷幾個鍵值並返回值不存在的第一個實例。循環返回意外的結果
問題是,我似乎無法得到它返回一個不存在的值的第一個實例;它要麼貫穿整個循環,要麼返回實際存在的值。
我的代碼:
@echo OFF
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\15.0\Excel\Options"
REM set VALUE_NAME=OPEN
FOR %%V IN (OPEN OPEN1 OPEN2 OPEN3 OPEN4 OPEN5 OPEN6 OPEN7 OPEN8 OPEN9 OPEN10 OPEN11 OPEN12 OPEN13 OPEN14 OPEN15 OPEN16 OPEN17 OPEN18 OPEN19) DO (
FOR /F "usebackq skip=2 tokens=1" %%A IN (`REG QUERY %KEY_NAME% /v %%V 2^>nul`) DO (
set ValueName=%%A
rem set ValueType=%%B
rem set ValueValue=%%C
if "%ValueName%"=="" (
@echo %KEY_NAME%\%%V not found.
PAUSE
GOTO :ADD_KEY
)
)
)
CLS
echo loop finished
PAUSE
exit
:ADD_KEY
CLS
ECHO IT WORKED
PAUSE
在我的測試中,上面的代碼返回如下:
"HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\15.0\Excel\Options"\OPEN not found
即使它實際上確實存在我的機器上。
如果我將If語句標準更改爲Not Defined ValueName
,則返回loop finished
。
我在這裏做錯了什麼?我可能錯過了一些簡單的事情,但我的谷歌搜索一直沒有成果。
注意:這些值(OPEN,OPEN1,OPEN2等)對應於已啓用 Excel加載項。
編輯
所以目前我的機器有值OPEN
,但它不具有的價值OPEN1
。這裏的目標是在找到一個不存在的值(在這種情況下爲OPEN1
)時,將退出循環,並執行代碼段ADD_KEY
。
你說得對,我很抱歉,那是我的疏忽。在我的機器上,OPEN存在,但沒有其他OPEN值存在(即OPEN1,OPEN2等)。所以我希望它返回第一個不存在的值,在這種情況下是OPEN1。我已經證實OPEN存在,而OPEN1不存在。 – ARich
你應該'編輯'這個額外的信息到問題中。看來'%% A'或'Valuename' **被設置爲缺席值。也許顯示用'ECHO(%% A)'找到的值會揭示爲什麼。 – Magoo
我的問題已更新。當我回顯%% A時,它顯示'%A',當我回顯%ValueName%時'ECHO is off'。我在這裏真的很茫然。 – ARich