“for”명령으로 어떻게 파이프합니까?


11

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.

답변:


22

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

10

에 대한 문서를 보면 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라고 생각합니다. 어쨌든 나를 위해 일하십시오.


내 질문을 보면 임시 파일을 사용하는 방법을 알 수 있습니다. 예를 들어 파일 'a'라고 불렀습니다. 당신이 처음에하는 말로, 당신은 파이프를 만드는 것에 가장 가까운 지점을 가지고 있습니다. 그리고 나는 그것을 할 수 있기 때문에 파이프를 사용할 수없는 이유를 설명 할 수 있다고 생각합니다. 파이프를 사용할 수없는 것 같습니다. 흥미롭게도 파이프 라인이라는 용어를 언급 할 것입니다. 파이프라는 말을들은 적이 없지만 구글이 보여줍니다.
barlop

4
기록을 위해, 그것이 "파이프 라인을 지원하지 않는 것"인 이유는 단순히 탈출하지 않았기 때문에 for대신에 배관 입니다 ipconfig. 그냥 할 for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f때, ^이스케이프 문자입니다.
Matthieu Cartier

고마워 neurolysis, 그것을 포함하도록 내 대답을 업데이트합니다.
Mikel

글쎄, 전과 같이 배관을 의미했다. 그러나 나는 할 수 없다고 확신합니다. 그러나 Mikel의 제안 에서처럼 "in"으로 할 수 있습니다. 그러나 Mikel의 라인을 시도하면서, 나는 Mikel의 라인에 문제가 생겼습니다. 그리고 당신 (neurolysis)은 파이프를 빠져 나와 그것을 고쳤습니다.
barlop

@ barlop, 예, 임시 파일 제안을 제거합니다. "파이프 라인"은 파이프가 중간에있는 일련의 명령을 의미하는 UNIX 용어입니다.
Mikel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.