Mam plik wsadowy, który używa tego idiomu (wiele razy), aby odczytać wartość rejestru w zmiennej środowiskowej:Dlaczego plik wsadowy FOR kończy się niepowodzeniem podczas iterowania po wynikach polecenia?
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B
(tam jest znak tabulatora po delims=
)
Działa to dobrze na tysiącach komputery klienta. Ale na komputerze jednego klienta (z uruchomionym Windows Server 2003, z włączonymi rozszerzeniami poleceń), nie działa z "REG QUERY" HKLM \ SOFTWARE \ Path \ To \ Key "/ v ValueName" nie jest rozpoznawane jako wewnętrzne lub zewnętrzne polecenie, działający program lub plik wsadowy. " Samo uruchomienie polecenia "zapytaj o reg" działa dobrze. Reg.exe jest obecny w C: \ Windows \ System32.
udało mi się obejść ten problem poprzez zmianę kodu do
REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B
ten dostał się klient i działa, ale chciałbym zrozumieć, dlaczego wystąpił błąd, dzięki czemu można uniknąć go w przyszłości .
Nieco poza głównym tematem - bardziej przydatny byłby również bardziej bezpośredni sposób uzyskania wartości rejestru (ciąg lub DWORD) w zmiennej środowiskowej.
Sprawdziłem, czy ustawiono EnableExtensions. Będę edytować pytanie, aby to zauważyć. –