5

Я ввожу что-то подобное

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

Но я не хочу, чтобы VariableValue попал в вывод. Я хочу просто получить xxx Возможно ли это?

4 ответа4

9

Я не хочу, чтобы VariableValue попал в вывод. Я хочу просто получить ххх Возможно ли это?

Использование командного файла:

@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

Дальнейшее чтение

2

Труба это через найти:

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 строк вывода. Обратите внимание, однако, что он будет пронумерован.

2

Передайте результаты в 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.

0

Вот еще одно решение:

    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 не содержат знаков равенства.

По сути, он работает, разбивая список на знаки равенства и возвращая второй результат.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .