“for”명령으로 어떻게 파이프합니까? C:\asd>for /f “tokens=15” %f in (a)

for 명령으로 파이프하는 방법 그래서 대신

    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.


답변

문서화되어 있지는 않지만 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

이 응답 에서 설명한대로 FOR 명령 내에서 “more”를 사용 하여 임의 명령에서 파이프 된 입력을 구문 분석 할 수도 있습니다 .

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

답변

에 대한 문서를 보면 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

(그것을 지적 neurolysis 덕분이어야 ^|단지가 아닌 |)

또는 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라고 생각합니다. 어쨌든 나를 위해 일하십시오.