Question Valeur de la propriété de sortie WMIC sans nom de propriété


J'entre quelque chose comme ça

Desktop>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
xxx

Mais je ne veux pas VariableValue entrer dans la sortie. Je veux simplement obtenir xxx C'est possible?


5
2018-03-24 21:16


origine




Réponses:


Je ne veux pas que VariableValue entre en sortie. Je veux simplement obtenir xxx Est-ce possible?

En utilisant un fichier de commandes:

@echo off
setlocal
for /f "usebackq skip=1 tokens=*" %%i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue ^| findstr /r /v "^$"`) do echo %%i
endlocal

En utilisant une ligne de commande:

for /f "usebackq skip=1 tokens=*" %i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue ^| findstr /r /v "^$"`) do @echo %i

Remarques:

  • for /f boucles à travers le wmic sortie.
  • skip=1 ignore la ligne d'en-tête (contenant VariableValue)
  • findstr /r /v "^$" supprime la ligne blanche de fin de la wmic sortie.

Exemple de sortie:

C:\Users\DavidPostill\AppData\Roaming\npm

Lectures complémentaires


8
2018-03-25 00:05



Merci. Est-ce qu'avoir une rupture de ligne PATH conduit à un problème ou est-ce juste une approche cosmétique? - Paweł Audionysos
@ PawełAudionysos Je ne suis pas sûr de ce que vous voulez dire. Qu'allez-vous faire avec la variable? - DavidPostill♦
L’objectif final serait d’ajouter une nouvelle voie à PATH variable, mais je devrais probablement poser quelques questions supplémentaires… - Paweł Audionysos
@ PawełAudionysos Vraiment? Je suis sûr que la réponse canonique est correcte - Que sont PATH et d'autres variables d'environnement et comment puis-je les définir ou les utiliser? - DavidPostill♦
Oui, par exemple, il n'est pas mentionné que setx PATH "xyz%PATH%" va tronquer votre variable à 1024 caractères. Ou il y a mention de% PATH% retournant combiné à la fois, utilisateur PATH et système pathvariable, mais il n'y a aucune mention sur la façon de résoudre ce problème (par exemple la méthode dans ma question) ... - Paweł Audionysos


Tuyau à travers trouver:

wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | find /i "c:"

Alternativement, vous pouvez le canaliser à travers trouverstr:

wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr/n ^^|findstr "^[2-9]:"

Cela vous donnera les 2 à 9 lignes de sortie. Notez, cependant, qu'il sera numéroté.


2
2018-03-24 21:27



Comment cela fonctionne-t-il? - Paweł Audionysos
@ PawełAudionysos Lorsque vous passez votre commande par find, elle recherche les lignes / chaînes contenant votre recherche. Dans ce cas, je l'ai recherché "c:" car (en supposant que votre système d'exploitation est installé sur le lecteur C :), il doit être quelque part dans la chaîne que vous voulez voir, mais pas l'en-tête que vous voulez supprimer. - Ploni
Ok, je pensais à la première fois que c'était une sorte de mauvaise blague ... Mais, la variable de chemin est-elle limitée uniquement au lecteur système? Eh bien, je n'ai rien sur d'autres lecteurs, mais quand j'aurais "D: \", il ne l'affichera pas si je le comprends bien. En outre, c’est une sorte d’exemple spécifique - et si je voulais simplement obtenir la valeur de quelque chose comme wmic cpu get maxClockSpeed Merci de votre intérêt de toute façon. - Paweł Audionysos
@ PawełAudionysos But, is path variable limited only to system drive?  Non ce n'est pas. En ce qui concerne les autres commandes, IDK (vous pouvez essayer d'anticiper le résultat et de le mettre dans votre find commander. En général, il y a probablement une meilleure façon de le faire, mais je ne sais pas comment faire. - Ploni
peut-être un truc facile pour se débarrasser de la première ligne? - Paweł Audionysos


Pipe votre sortie dans trouverstr comme l'a suggéré Ploni, mais utilisez le /v option pour findstr. Cette option indique à findstr d'afficher uniquement les lignes ne contenant pas de correspondance, vous pouvez donc spécifier que vous ne souhaitez pas voir les lignes contenant "VariableValue". Par exemple.:

C:\Users\Jane>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;


C:\Users\Jane>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /v VariableValue
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;


C:\Users\Jane>

Remarque: vous pouvez également spécifier que vous ne voulez ignorer que les lignes commençant par VariableValue, si vous devez inclure des lignes où il apparaît plus tard dans la ligne en utilisant /R option à findstr, qui spécifie que vous utiliserez un expression régulière et ensuite mettre un ^ avant la chaîne de recherche, depuis le caret caractère représente le début d'une ligne. Par exemple., wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /V /R "^VariableValue"

Mettre à jour: Comme alternative au find et findstr commandes, une version du GNU grep utilitaire, qui prend en charge les expressions régulières et est largement utilisé sur les systèmes Linux / Unix, est disponible pour Windows. Grep, ainsi que d'autres GNOU les utilitaires pour les systèmes Windows peuvent être téléchargés à partir de Forfaits GnuWin.


2
2018-03-24 22:42



Merci, cela a l'air bien, mais vous ne pouvez pas garantir que la valeur de la propriété n'aura pas de lignes commençant par la même sous-chaîne que le nom de la propriété. Cela a l'air mieux mais ce n'est toujours pas une solution ultime. Y a-t-il d'autres util disponibles dans cmd qui fournit une expression régulière? Celui-ci est en quelque sorte limité, si seulement il y avait un drapeau multi-lignes optionnel, il serait déjà résolu ...: / Savez-vous s'il y a une option dans wmic donc il ne retournerait pas cette ligne en premier lieu? S'il n'y a pas une telle option, j'accepte simplement la question et pose une autre question sur le retrait de ligne. - Paweł Audionysos
@ PawełAudionysos "Savez-vous s'il y a une option dans wmic afin qu'elle ne renvoie pas cette ligne à la première place?" Voir ma réponse :) - DavidPostill♦