Pour ce cas particulier, vous pouvez commencer par:
for /f "tokens=3" %i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE ^| findstr PROCESSOR_ARCHITECTURE') do set x=%i
qui établira %x%
à x86 (dans mon cas).
Si la troisième valeur sur la ligne peut contenir des espaces, vous aurez besoin pour obtenir un peu plus compliqué
Le script suivant montre une façon d'être plus délicat. Il utilise essentiellement une ligne de débogage pour produire une sortie fictive de reg
qui vous donne une architecture avec des espaces.
@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=2*" %%a in ('echo. PROCESSOR_ARCHITECTURE REG_SZ x86 64-bit grunter') do (
set arch=%%b
)
echo !arch!
endlocal
La sortie de c'est:
x86 64-bit grunter
comme prévu (garder à l'esprit il s'effondre plusieurs espaces en un seul). Le bit tokens=2*
met le jeton 2 (REG_SZ
) en %%a
et tous les jetons suivants en %%b
.
donc un bon scénario final serait:
@setlocal enableextensions enabledelayedexpansion
@echo off
set id=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set key=PROCESSOR_ARCHITECTURE
for /f "tokens=2*" %%a in ('REG QUERY "!id!" /v !key! ^| findstr !key!') do (
set arch=%%b
)
echo !arch!
if !arch!==x86 echo arch was x86
endlocal
Ce sorties de script:
x86
arch was x86
si vous savez qu'il est défini comme étant que vous désirez.
+1 C'est ce que je trouverais. Si la valeur contient des espaces, vous pouvez utiliser 'for/f" tokens = 2 * "...'. Ce site donne quelques explications: http://www.robvanderwoude.com/ntregistry.php –
@Pax, j'ai essayé votre solution. Je redirige le résultat vers un fichier txt: echo% x%> 1.txt Il contient toujours un retour chariot. Il renvoie également false pour cette instruction: if% x% == "x86" – eric2323223
Très utile! Merci, Frank. – eric2323223