좋은 많은 정보는 이미 여기에 게시되어 있습니다 - 예를 들어, 괄호가있다 "는 CMD 쉘은 일반적으로 하나의 명령이 나타날 것으로 예상 위치를 그룹화 할 수있는 그룹 운영자가 함께 일련의 명령이 장소에 사용하는" 것을 "처럼 블록 시작 과 끝 블록을 " -하지만, 몇 가지 간단한 일이 간과되었다 :
1. "현재 예기치 않은"오류가 발생하지 않는 방법
More?
프롬프트 에서 명령을 입력하면 간단히 유용한 정보를 얻을 수 있습니다 .
C:\> (
More? date /t
More? )
Tue 04/11/2017
C:\> (
More? dir \Windows\win.ini
More? )
Volume in drive C is OS
Volume Serial Number is ▒▒▒▒-▒▒▒▒
Directory of C:\Windows
08/13/2014 12:26 PM 435 win.ini
1 File(s) 435 bytes
0 Dir(s) ▒▒▒,▒▒▒,▒▒▒,▒▒▒ bytes free
C:\>
별도의 줄에 여러 명령을 입력 할 수 )
있으며 마지막 줄의 끝까지 위로 이동할 수 있습니다 .
C:\> (
More? date /t
More? time /t
More? )
Tue 04/11/2017
06:18 PM
C:\> (
More? date /t
More? time /t)
Tue 04/11/2017
06:18 PM
C:\>
2. 어떻게 (
하고 )
명령의 의미에 영향을?
다른 사람들이 지적했듯이 다음과 같은 명령이 있습니다.
C:\> for %f in (\Windows\*.dll) do @echo %f
여기서 (
… )
는 명령 자체의 구문의 일부입니다 ( FOR
이 경우). 괄호를 제거하면 구문 오류가 발생합니다. 나는 그것에 대해 이야기하고 있지 않습니다.
ad nauseam 에서 언급했듯이 그룹 명령을 괄호로 묶습니다 . 이 명령 행을 고려하십시오.
echo cat & echo dog | findstr /n a
그 뜻은
- 수행
echo cat
한 후, 및
- 마
echo dog | findstr /n a
단어 "개"는 문자 "A"를 포함하지 않기 때문에,이 명령은 출력을 생성하지 않습니다.
따라서 위의 출력은
C : \> 에코 고양이 & 에코 개 | findstr / na
고양이
비슷하게,
C : \> 에코 고양이 & 에코 개 | findstr / 아니
고양이
1 : 개
1:dog
"dog" 에는 "o " 가 포함되어 있고 "dog"은 명령에 대한 첫 번째 ( 1 ) 입력 라인 이므로 추가 출력 을 얻습니다 findstr
.
이제 고려
(echo cat & echo dog) | findstr /n a
(위와 동일하지만 괄호가 추가됨)
- 수행
echo cat
,
다음
을 수행 echo dog
하고,
- 위의 출력을 가져 와서 파이프에 넣습니다.
findstr /n a
그래서,
C : \> (에코 고양이 & 에코 개) | findstr / na
1 : 고양이
C : \> (에코 고양이 & 에코 개) | findstr / 아니
2 : 개
명령 행의 왼쪽 (# 1) 출력은
cat
dog
"a"는 해당 텍스트의 1 행 에 있고 "o"는 2 행에 있습니다. 더 이상 독립형 명령이 아니고 파이프 라인의 왼쪽을 구성하는 그룹의 일부이므로 더 이상 ( cat
행 번호없이) 출력 라인을 얻지 echo cat
못합니다 .
다음은 명령 그룹화에 대한 간단한 예입니다.
C:\Temp> echo cat & echo dog > animals
cat
C:\Temp> type animals
dog
C:\Temp> (echo cat & echo dog) > animals
C:\Temp> type animals
cat
dog
물론 위와 다른 답변에서 볼 수 있듯이 그룹 내에 줄 바꿈을 추가 할 수 있습니다.
C : \> (
더? 에코 고양이
더? 에코 개
더? ) | findstr / na
1 : 고양이
3. 괄호가 새로운 CMD 인스턴스를 생성합니까?
나는 그렇게 생각하지 않는다. 명백하고 의미있는 방법으로 :
C:\> (cd windows)
C:\Windows> set a=aardvark
C:\Windows> (set a=bat)
C:\Windows> echo %a%
bat
점을 유의 cd
괄호 안의 메인 CMD 프로세스의 작업 디렉토리를 변경하고 set
괄호 안에 괄호 밖에서 설정된 변수 값을 대체합니다.