Windows Lot: reg query clé de la valeur à une variable, mais ne pas afficher d'erreur si la clé n'existe pas
J'ai le lot suivant de commande qui extrait une clé de registre et assigne une valeur à une variable, mais il affiche erreur lorsque la clé n'existe pas
for /f "tokens=2,*" %%a in ('reg query HKLM\Software\MySoftware.0\MyExecutable /v "InstallDir" ^| findstr InstallDir') do set InstallPath=%%b
Est-il un moyen de contourner l'exception? J'ai essayé d'utiliser 2>NUL après le reg de la requête ou à la fin de la commande, mais j'obtiens une exception 2> était inattendu en ce moment.
aide/conseils apprécié
OriginalL'auteur G33kKahuna | 2011-03-20
Vous devez vous connecter pour publier un commentaire.
Vous devez résoudre le problème comme avec le tuyau.
^|
Tout simplement échapper à
2^>NUL
De sorte que vous obtenez
C'est nécessaire parce que la partie de commande de la Boucle FOR sera analysée en deux temps.
D'abord dans le cadre de votre fichier de commandes (il y a 2>NUL est inattendu), et la deuxième fois dans le nouveau cmd.exe contexte (il y a 2>NUL redirige le stderr de votre
reg
commande)Notez que cette méthode ne fonctionne que si la valeur que vous recherchez n'est pas un espace dans son nom. Supposons qu'il n'y est une valeur nommée
Product Version
puis lefor /f "tokens=2,*"
serait de devenir confus.Vous avez raison, mais vous savez combien d'espaces de valeur de la contenir et vous pouvez changer le
tokens=2,*
àtokens=2+<space>,*
Il revient toujours à: Faire des trucs de base dans des fichiers batch est difficile, de faire quelque chose à distance avancée est une douleur dans le cul. Nice outre, bien que l'.
La chose drôle est, j'ai pensé à la fuite de type char, mais je l'ai pré-construit la commande à exécuter dans un environnement variable. Lorsque vous faites cela, vous devez double-échappement (^^^>) dans la variable, de sorte qu'une fuite de redirection s'affiche dans la commande for. Merci de m'indiquer ce. En outre, vous n'avez pas besoin de findstr de la ligne droite, vous pouvez spécifier tokens=1,2,* et ensuite l'utiliser pour ... %%a in (...) faire si %%a==Dir ensemble InstallPath=%%c
OriginalL'auteur jeb
Où après le reg query as-tu mis? Cela devrait fonctionner (regardez juste avant la findstr):
OriginalL'auteur ssarabando