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?
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
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é.
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 .
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.