DOS 명령의 출력을 다른 명령의 인수로 전달합니까?


2

리눅스에서는, 이것은 하나의 명령을 취하고 출력 (stdout)을 다른 것으로 전달합니다 :

echo `ls`

Windows / cmd / batch에 해당하는 항목은 무엇입니까?

답변:


12

cmd.exe 백틱을 사용하여 기본 명령 대체 기능을 제공하지만 for 고리 와 더불어 /f usebackq 선택권. 하지만 유닉스 셸이하는 일에 비해 꽤 뇌사 상태입니다. 표준 동작은 자식의 각 출력 행의 첫 번째 단어 만 가져 오는 것이므로 단지 반복 할 수 있으므로 붙여 넣기 만 할 수는 없습니다. 모두 명령 줄에 한 번에 (당신은 행동을 다소 조정할 수 있습니다. delims 옵션). 다음은 그 예입니다.

for /f usebackq %F in (`dir /w s*c`) do echo %F

정품 유닉스 스타일 명령 대체를 원한다면 정품 유닉스 쉘이 필요하다. 예를 들어, Cygwin bash 또는 내 자신의 (상업) 해밀턴 C 쉘 .


0

에코 출력 예 dir (따옴표는 사용하지 말고 작은 따옴표를 사용하십시오!) :

echo off & for /f "delims=" %A in ('dir') do echo %A

대화 형 모드에서 입력해야합니다. echo on 언론 들어가다 나가기 위해서. 루프가 한 번만 실행됩니다 (즉, ('xxx') 한 줄이면), 직접 추가 할 수 있습니다. echo on 명령에서.

echo off & for /f "delims=" %A in ('set /a 0x3DE1') do net helpmsg %A & echo on

알려지지 않은 이유로, ('set /a 0x3DE1') 같이 할 수 없다. 'set /a c=0x3DE1', 비록 set /a c=0x3DE1 단일 명령으로 작동합니다.

의 예 echo hello world ...에서 'echo hello world' (작은 따옴표) :

echo off & for /f "delims=" %A in ('echo hello world') do echo %A

의 예 echo hello world ...에서 "" (리터럴 문자열) :

echo off & for /f "delims=" %A in ("hello world") do echo %A

위의 구문 %A 대화 형 모드를 사용하려면 두 배가 필요합니다. % 배치 파일 (예 : %%A

너 한테 신경 써라. echo %A 루프 내부에서 명령의 출력에서 ​​하나의 라인이 호출되면 상상해보십시오. on, 다음 두 가지 문제가 있습니다.

[1] echo $A 방법 echo on 아무것도 표시되지 않고 보이지 않게됩니다. 나는 단지 그것들을 on 그러한 특별한 경우를 다루는 것.

[2] echo $A 방법 echo on 명령 프롬프트 출력을 토글합니다. 여분을 추가해야 할 수도 있습니다. echo off 루프 내부. 예 :

echo off & for /f "delims=" %A in ('dir /b') do echo %A & echo off

위의 예제는 `` 줄 단위로 인수를 실행하기 때문입니다. 이 배치를 만들어 시뮬레이션을 시도 할 수 있습니다. echo `ls` (루프를 만들고 모든 줄을 공백으로 구분 된 단일 변수에 추가 한 다음 나중에 인수로 전달합니다).

@echo off
Setlocal EnableDelayedExpansion
set fls=
for /f "delims=" %%A in ('dir /b') do set fls=!fls! %%A
echo %fls%

- 편집 : 공백을 추가했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.