2010-04-23 16 views
0

Je veux utiliser chauve-souris pour automatiser certains de mes travaux. Il doit d'abord rechercher la valeur d'une clé de Registre, puis copier certains fichiers dans le répertoire inclus dans la valeur de la clé de Registre. Je utilisé commande reg requête pour rechercher registre, tels que:Comment gérer le retour chariot avec le script batch Windows?

REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE 

Le résultat semble contient un retour chariot et je dois l'enlever, je l'ai essayé quelques solutions, mais tout a échoué. Quelqu'un pourrait-il m'aider?

Répondre

3

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

+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 –

+0

@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

+0

Très utile! Merci, Frank. – eric2323223

Questions connexes