@ECHO OFF
SETLOCAL
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\My Entry"
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Space Sciences Laboratory, U.C. Berkeley\BOINC Setup"
set VALUE_NAME=migrationdir
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (
`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set "ValueName=%%A"
set "ValueType=%%B"
set Home="%%C"
)
IF DEFINED home SET home=%home:"=%
if defined Home echo Home = %Home%
if NOT defined Home echo %KEY_NAME%\%VALUE_NAME% not found.
, ben var bir anahtar ikame ettik.
İlk madde - gerekli veri bir boşluk içeriyor ve boşluk varsayılan bir sınırlayıcı olduğundan, 1,2*
tokens - ilk, saniye ve kalan satır - olarak kullanılmalıdır. , \Dir1\Dir2
bu etmektir aşmak için buraya
bir yolu beklenmemektedir sizin durumunuzda -
yanındaki küçük zorluk veri öğesi AYRICA FOR/f
dolayısıyla bir hata vererek kapanış parantez olarak yorumlanır yüklenebileceğini )
içermesidir Alıntı yaptıktan sonra home
'a atanan değeri şeritleyin. Ancak bir kez daha, home
'daki kapanış parantezi IF deyiminin TRUE bölümünü sonlandırmaya yarar. HOME'a atanan bir değerin varlığını/yokluğunu açmak
. Açıkça görülüyor ki, burada başarısız bir başarısızlık hatası olsa da aynı şey Valuename
için söylenebilir. İstenen kayıt defteri girdisi bulunmazsa
ardından FOR/f
içinde SET
ler dolayısıyla üç değişkenin değerleri FOR/f
çalıştırılmadan önce onlar olabilecek değerden değişmez, gerçekleştirilmez. Bu nedenle, home
(veya bu değeri kullanmayı seçerseniz valuename
) someexistingvalue
değerini for/f
önce varsa, beklenmedik sonuçlar sunulabilir.
(BTW - bu meşru ve en ya for/f
kırmak için kıvrımlara görünümlü veya IN
maddesinin parantez ikisi)
'REG SORGU% KEY_NAME%/hacim% VALUE_NAME%' çıktısı nedir? – user2033427
Çıktı bana kayıt adı, türü ve veri (şimdi tam olarak i.e. tüm dizeyi içerir :-)) gösteriyor. Daha sonra veri bölümünün bir değişkende saklanmasını nasıl sağlarım? Thankss! – Yos