8

Как мне передать по команде? Так что вместо

    C:\asd>ipconfig | findstr "Address" >a

   C:\asd>for /f "tokens=15" %f in (a) do @echo %f
   192.168.1.3

Я хотел бы иметь возможность сделать это в одну строку.

C:\asd>ipconfig | findstr "Address" | for /f "tokens=15" %f do @echo %f
do was unexpected at this time.

2 ответа2

18

Хотя это не выглядит документированным, вы можете передать команду внутри команды FOR. Я впервые узнал об этом из этого примера:

SC query | FOR /F "tokens=2" %%i IN ('FIND /I "SERVICE_NAME"') DO @ECHO %%i

Эта модифицированная версия вашего кода работает:

C:\>ipconfig | for /f "tokens=14" %f in ('findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y

Вы также можете использовать "more" внутри команды FOR, как описано в этом ответе, для анализа входных данных произвольной команды:

C:\>ipconfig | findstr "Address" | for /f "tokens=14" %f in ('more') do @echo %f
192.168.x.x
192.168.y.y
9

Смотря на документацию for (запустить for /? чтобы увидеть это), я не думаю, что for /f будет читать из трубы. Единственными допустимыми источниками являются набор файлов, "строка" и "команда".

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

Вы можете поместить команду внутри for :

for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f

192.168.x.x
192.168.y.y

(спасибо невролизу за указание на то, что он должен быть ^| а не просто |)

Или вы можете попробовать поставить ipconfig | findstr "Address" в отдельном пакетном скрипте и вызов:

for /f "tokens=14" %f in ('ipaddresses') do @echo %f

(при условии, что вы назвали сценарий ipaddresses).

Или вы можете использовать for для выполнения работы findstr , например так:

for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j

192.168.x.x
192.168.y.y

это не совсем то же самое, потому что он не будет соответствовать адресам IPv6, но что-то в этом роде может сработать.

Также обратите внимание, что я изменил tokens=15 на tokens=14 . Я думаю, что последнее поле в строке - это токен 14. У меня все равно работает.

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