web-dev-qa-db-fra.com

Valeur de 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 que VariableValue entre dans la sortie. Je veux simplement obtenir xxx Est-ce possible?

5
Paweł Audionysos

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

Utiliser un fichier batch:

@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 parcourt la sortie wmic.
  • skip=1 ignore la ligne d'en-tête (contenant VariableValue)
  • findstr /r /v "^$" supprime la dernière ligne vide de la sortie wmic.

Exemple de sortie:

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

Lectures complémentaires

  • n index AZ de la ligne de commande Windows CMD - Une excellente référence pour tout ce qui concerne la ligne de commande cmd de Windows.
  • findstr - Recherche des chaînes dans les fichiers.
  • for/f - Commande en boucle contre les résultats d'une autre commande.
  • wmic - Commande Windows Management Instrumentation.
10
DavidPostill

Pipe à travers trouver :

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

Alternativement, vous pouvez le diriger à travers findstr :

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
Ploni

Transférer votre sortie dans findstr comme suggéré par Ploni, mais utilisez l'option /v 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 afficher 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 souhaitez uniquement ignorer les lignes commençant par VariableValue, si vous devez inclure les lignes où elles apparaissent plus tard dans la ligne à l'aide de l'option /R de findstr, ce qui indique que vous utiliserez un expression régulière et mettez un ^ avant la chaîne de recherche, car le caractère caret représente le début d'une ligne. Par exemple, wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /V /R "^VariableValue"

Mise à jour: Comme alternative aux commandes find et findstr, une version de la GNU grep Cet 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 utilitaires GNU pour systèmes Windows peuvent être téléchargés à partir de paquets GnuWin .

2
moonpoint

Voici une autre solution:

    for /f "usebackq skip=1 delims== tokens=2" %i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue /FORMAT:TextValueList`) do @echo %i

Notez que cette méthode ne fonctionne correctement que si les valeurs de la requête wmic ne contiennent pas le même signe.

Cela fonctionne essentiellement en scindant la liste aux signes d’égalité et en renvoyant le deuxième résultat.

0
Jenna Sloan