Я ввожу что-то подобное
Desktop>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
xxx
Но я не хочу, чтобы VariableValue
попал в вывод. Я хочу просто получить xxx
Возможно ли это?
Я ввожу что-то подобное
Desktop>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
xxx
Но я не хочу, чтобы VariableValue
попал в вывод. Я хочу просто получить xxx
Возможно ли это?
Использование командного файла:
@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
Используя командную строку:
for /f "usebackq skip=1 tokens=*" %i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue ^| findstr /r /v "^$"`) do @echo %i
Заметки:
for /f
проходит через вывод wmic
.skip=1
пропускает строку заголовка (содержащую VariableValue
)findstr /r /v "^$"
удаляет завершающую пустую строку из вывода wmic
.Пример вывода:
C:\Users\DavidPostill\AppData\Roaming\npm
wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | find /i "c:"
Кроме того, вы можете передать это через findstr:
wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr/n ^^|findstr "^[2-9]:"
Это даст вам 2-9 строк вывода. Обратите внимание, однако, что он будет пронумерован.
Передайте результаты в findstr, как предложил Ploni, но используйте параметр /v
для findstr. Эта опция указывает findstr отображать только строки, которые не содержат совпадения, поэтому вы можете указать, что не хотите видеть строки, содержащие "VariableValue". Например:
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>
Примечание: вы также можете указать, что вы хотите игнорировать только строки, начинающиеся с VariableValue, если вам нужно было включить строки, где оно появилось позже в строке, с помощью параметра /R
для findstr, который указывает, что вы будете использовать регулярное выражение и затем поставьте ^
перед строкой поиска, так как символ вставки представляет начало строки. Например, wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /V /R "^VariableValue"
Обновление. В качестве альтернативы командам find
и findstr
для Windows доступна версия утилиты GNU grep , которая поддерживает регулярные выражения и широко используется в системах Linux/Unix. Grep, а также другие утилиты GNU для систем Windows можно загрузить с GnuWin Packages.
Вот еще одно решение:
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
Обратите внимание, что этот метод работает правильно только в том случае, если значения запроса wmic не содержат знаков равенства.
По сути, он работает, разбивая список на знаки равенства и возвращая второй результат.