cmd에서 "("는 무엇을 의미합니까?

cmd에서 "("는 무엇을 의미합니까?

(, 즉 ,an 을 입력할 때마다여는 괄호에서명령 프롬프트, 이런 일이 발생합니다:

(
More? 

계속해서 입력하면( 또는 다른 캐릭터, 동일한 메시지가 표시됩니다.이 중지되었습니다, 을 입력하면 ), 즉닫는 괄호, 하지만 다음과 같은 오류가 발생합니다.

) was unexpected at this time

그 외에 나는이 명령의 기능을 찾을 수 없습니다. 어떤 아이디어가 무엇입니까?

답변1

()는 실제 명령은 아니지만 CMD 셸에서 일반적으로 단일 명령이 나타날 것으로 예상하는 위치에서 사용할 수 있도록 일련의 명령을 그룹화할 수 있는 그룹화 연산자입니다.
() 사이의 명령은 실제로 별도의 CMD 인스턴스에서 실행됩니다. "("를 수동으로 입력하면 새 인스턴스를 입력하고 명령을 기다립니다.

if not exist c:\myfile (
  echo File doesn't exist
) else (
  echo File DOES exists
  del c:\myfile
)

일반적으로 IF ELSE는 같은 줄에 있어야 하며 THEN 및 ELSE 절에서는 단일 명령만 실행할 수 있습니다.
"()"를 사용하면 전체 (xxxxx) 블록이 단일 명령으로 처리되며 마치 같은 줄에 나타나는 것처럼 처리됩니다.

답변2

여기에는 이미 많은 좋은 정보가 게시되어 있습니다. 예를 들어 괄호는"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이 경우 ). 괄호를 제거하면 구문 오류가 발생합니다. 나는 그것에 대해 말하는 것이 아닙니다.

명시된 바와 같이광고 구역질난다, 괄호그룹명령. 다음 명령줄을 고려해보세요.

echo cat & echo dog | findstr /n a

그 뜻은

  1. 하세요 echo cat, 그리고 나서
  2. Do echo dog | findstr /n a
    단어 "dog"에는 문자 "a"가 포함되어 있지 않으므로 이 명령은 출력을 생성하지 않습니다.

따라서 위의 출력은 다음과 같습니다.

C:\> 에코캣 & 에코독 | findstr /na
고양이

비슷하게,

C:\> 에코캣 & 에코독 | findstr /아니요
고양이
1:

1:dog"dog" 때문에 추가 출력을 얻습니다 .하다"o"를 포함하고 "dog"이 첫 번째입니다(1st) 명령에 대한 입력 줄입니다 findstr.

이제 고려해보세요

(echo cat & echo dog) | findstr /n a

(위와 동일하지만 괄호가 추가됨) 이는 다음을 의미합니다.

  1. , 그리고 , 그리고echo cat

    echo dog
  2. 위의 출력을 가져와 파이프로 연결합니다.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괄호 안은 괄호 외부에 설정된 변수 값을 재정의합니다 .

답변3

( 및 )는 begin block및 와 같습니다 end block. 배치 파일(.bat)에 넣을 수 있는 모든 항목을 명령줄에 입력할 수 있습니다.

예를 들어 다음 명령문 블록을 넣을 수 있는 배치 파일을 작성할 수 있습니다 if.

if "%1"=="" (
  echo Multiple
  echo Lines when no parameter
)
echo END

이제 매개변수 없이 배치를 실행하면 (과 사이의 모든 명령이 )실행됩니다. 첫 번째 매개변수가 제공되면 유일한 출력은 'END'입니다.

이제 명령줄로 돌아갑니다. 명령줄에 직접 입력하여 실제로 사용할 수 있는 트릭이나 기술은 없습니다. 그러나 이는 동일한 규칙을 따릅니다. 명령줄에 다음을 입력하면:

(echo "1" & echo "2")

출력은 다음과 같습니다

1
2

관련 정보