Windows CMD에서 한 줄에 두 개의 명령을 어떻게 실행합니까?


958

Windows CMD 콘솔에서 두 가지 명령을 실행하고 싶습니다.

리눅스에서 나는 이것을 이렇게 할 것이다.

touch thisfile ; ls -lstrh

Windows에서 어떻게 수행됩니까?

답변:


1318

2000 년 이후 모든 Microsoft OS에서 다음과 같이 오늘날에도 여전히 좋습니다.

dir & echo foo

첫 번째 명령이 성공적으로 종료 된 경우에만 두 번째 명령을 실행하려면 다음을 수행하십시오.

dir && echo foo

한 줄에 여러 명령을 실행하는 단일 앰퍼샌드 (&) 구문은 Windows XP, Windows 2000 및 일부 이전 NT 버전으로 돌아갑니다. (여기서 한 사람의 의견에 따르면 4.0 이상)

이 페이지에서 아래로 스크롤 할 수있는 다른 점이 많이 있습니다.

교육 자료를 찾을 수있는 사람들을위한 과거 데이터가 이어집니다.

그 이전에 && 구문은 해당 기능이 Microsoft 명령 인터프리터에 추가되기 전에 쉘 대체 4DOS의 기능 일뿐이었습니다.

Windows 95, 98 및 ME에서는 파이프 문자를 대신 사용합니다.

dir | echo foo

MS-DOS 5.0 이상에서 일부 이전 Windows 및 NT 버전의 명령 인터프리터를 통해 (언급되지 않은) 명령 구분 기호는 문자 20 (Ctrl + T)이며 ^ T로 표시됩니다.

dir ^T echo foo

26
NT 4 이상.
Joey

17
Win 8.0 및 8.1에서도 작동합니다.
MEMark

5
@Fallenreaper는 직선 cmd프롬프트에서도 작동 하므로 나쁜 습관이 아니라고 가정합니다. :)

6
@Fallenreaper 두 사람의 실제 차이점을 알고 있어야합니다. 아래의 Raihan의 답변을 참조하십시오.
Moshe Katz

8
알았어 A & B, B는 A가 성공한 경우에만 실행되는 반면 A & B는 A의 결과가 무엇이든 A 이후에 B를 실행합니다. 머리를 주셔서 감사합니다
Fallenreaper

578

설명서에서 인용 한 내용 :

여러 명령 및 조건부 처리 기호 사용

조건부 처리 기호를 사용하여 단일 명령 줄 또는 스크립트에서 여러 명령을 실행할 수 있습니다. 조건부 처리 기호가있는 여러 명령을 실행하는 경우 조건부 처리 기호 오른쪽의 명령은 조건부 처리 기호 왼쪽의 명령 결과에 따라 작동합니다.

예를 들어, 이전 명령이 실패한 경우에만 명령을 실행할 수 있습니다. 또는 이전 명령이 성공한 경우에만 명령을 실행할 수 있습니다.

다음 표에 나열된 특수 문자를 사용하여 여러 명령을 전달할 수 있습니다.

  • & [...]
    command1 & command2
    하나의 명령 줄에서 여러 명령을 분리하는 데 사용합니다. Cmd.exe는 첫 번째 명령을 실행 한 다음 두 번째 명령을 실행합니다.

  • && [...]
    command1 && command2
    기호 앞의 명령이 성공한 경우에만 && 다음에 명령을 실행하는 데 사용하십시오. Cmd.exe는 첫 번째 명령을 실행 한 다음 첫 번째 명령이 성공적으로 완료된 경우에만 두 번째 명령을 실행합니다.

  • || [...]
    command1 || command2
    || 다음 명령을 실행하는 데 사용하십시오. 앞의 명령이 || 실패합니다. Cmd.exe는 첫 번째 명령을 실행 한 다음 첫 번째 명령이 성공적으로 완료되지 않은 경우에만 두 번째 명령을 실행합니다 (오류 코드가 0보다 큰 경우).

  • ( ) [...]
    (command1 & command2)
    여러 명령을 그룹화하거나 중첩하는 데 사용합니다.

  • ; or ,
    command1 parameter1;parameter2
    명령 매개 변수를 분리하는 데 사용하십시오.


41
시도하십시오 cmd /c "echo foo & echo bar".
Raihan

2
vagrant up && vagrant sshWindows 10에서 따옴표없이 작동했습니다.
furman87

감사! 나는 singe에 대해 몰랐다 &-비 동기화하고 병렬로 실행한다. 내가 &&함께 사용했기 때문에 붙어 있었고 첫 번째 성공한 경우에만 계속됩니다!
TetraDev 2016 년

1
문서 링크가 끊어짐, 새로운 위치 technet.microsoft.com/en-us/library/bb490954.aspx
nkef

7
@TetraDev &는 명령을 비동기 또는 병렬로 만들지 않습니다. 완료 command1 & command2 실행 됩니다. 성공 또는 실패 는 관련이 없습니다. command2 command1command1
bornfromanegg

74

&대한 배쉬 동일합니다 ;(실행 명령)과 &&의 배쉬 동일합니다 &&(이전이 오류가 발생하지 않은 경우에만 실행되는 명령).


1
이것은 csh, tcsh 및 더 많은 쉘에도 적용됩니다. 나는 ;리눅스에서 본 적이 없다
phuclv

10
sh 스타일 쉘의 @ LưuVĩnhPhúc ;은 첫 번째 명령을 실행하고 완료 될 때까지 기다렸다가 두 번째 명령을 실행하는 것을 의미합니다. &즉, 첫 번째 명령을 실행하고 백그라운드로 놓고 두 번째 명령을 실행하는 것을 의미합니다. 따라서 두 프로그램이 동시에 시작됩니다. 이것들은 심볼을 결합하는 것이 아니라 첫 번째 명령의 마지막 심볼입니다. progname &두 번째 명령없이 백그라운드에서 단일 명령을 시작할 수 있습니다 .
MM

25

&를 사용하여 명령을 하나씩 실행할 수 있습니다. 예:c:\dir & vim myFile.txt


19

cmd 바로 가기를 작성하려면 (예 : 데스크탑) / k 매개 변수를 추가하십시오 (/ k는 유지를 의미하고 / c는 창을 닫습니다).

cmd /k echo hello && cd c:\ && cd Windows

16

호출 을 사용 하여 너무 빨리 평가되는 환경 변수의 문제를 극복 할 수 있습니다. 예 :

set A=Hello & call echo %A%

1
변수가 아직 설정되지 않은 경우에만 작동하며,이 경우 새 값이 아닌 이전 값을 echo인쇄 합니다. 적어도 이것은 Windows 7 상자에서 관찰되는 것입니다.
크레이그 M. 브란덴부르크

변수가 설정되지 않았는지 확인하기 위해 set A =를 먼저 사용합니다.
SSi

1
더 나은 방법은 지연된 확장 ( setlocal EnableDelayedExpansion스크립트 또는 cmd /v)을 사용하는 것입니다. 예를 들면 다음과 같습니다 timeout 5 && cmd /v /c echo !TIME! && echo %TIME%..
Nick

5
첫 번째 퍼센트 뒤에 ^를 사용하여 새 값을 얻으십시오. set A = Hello & call echo % ^ A %
Nicolas

9

다수의 처리 된 심볼은 동일 라인에 여러 개의 명령어를 실행할 때 사용될 수 있으며, 어떤 경우에는 재 처리를 다른 경우에 출력을 변화로 이어질 또는 단지 실패 할 수있다. 한 가지 중요한 경우는 변수를 조작하는 동일한 행 명령에 배치하는 것입니다.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

위의 예에서 볼 수 있듯이 변수를 사용하는 명령이 같은 줄에 배치되면 지연된 확장을 사용하여 변수 값을 업데이트해야합니다. 변수가 색인화되면 CALL 명령을 %% 수정 자와 함께 사용하여 동일한 행에서 값을 업데이트하십시오.

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

주어진 예는 나를 위해 작동하지 않았지만 하나 아래에서 작동했습니다.cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
sactiw

8

cmd /c ipconfig /all & Output.txt

이 명령 Output.txt은 단일 명령으로 명령을 실행하고 파일을 엽니 다


8

따라서 RegAsm상황에 맞는 메뉴에서 특정 어셈블리 작업 (조립품 등록) 을 활성화하려고했습니다 . 내가 가진 문제는 결과를 읽을 수 있기 전에 결과가 깜박이고 사라질 것이라는 것이 었습니다. 따라서 .bat 스크립트에서 Pause 명령이 작동 하지 않고 여기에서 배치 파일 명령 PAUSE가 작동하지 않음Pause 으로 언급 된 것처럼 명령에 실패하면 작동하지 않는으로 파이핑을 시도했습니다 . 그래서 시도 했지만 더 많은 명령을 위해 창을 열어 둡니다 (결과를 읽고 싶습니다). 내가 추가 그래서 다음에 다음의 결과로, 체인 :cmd /kpauseexit

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

이것은 매력처럼 작동합니다-RegAsm이 파일에서 실행되고 결과가 표시된 다음 "계속하려면 아무 키나 누르십시오 ..."프롬프트가 표시되고 키를 누르면 명령 프롬프트 창이 닫힙니다.

추신 : 관심이있는 다른 사람들을 위해 다음 .reg 파일 항목을 사용하여 dll 파일 연결을 .dll 파일에 추가 한 다음 RegAsm 명령 확장을 이스케이프 할 수 있습니다 (이스케이프 된 따옴표와 백 슬래시에 유의).

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

이제 어셈블리를 등록 할 멋진 마우스 오른쪽 버튼 메뉴가 있습니다.



4

두 명령을 동시에 실행하려면 두 명령 사이에 & (앰퍼샌드) 기호를 넣어야합니다. 이렇게 :

color 0a & start chrome.exe

건배!


4

같은 창에 두 개의 핑을 시도하고 동일한 줄의 직렬 명령입니다. 첫 번째 작업을 완료 한 후 두 번째 명령을 실행하십시오.

해결책은 start /bWindows 7 명령 프롬프트 와 결합하는 것이 었습니다 .

없이 평소대로 시작 /b하고 별도의 창에서 시작하십시오 .

같은 줄에서 실행하는 데 사용되는 명령은 다음과 같습니다.

start /b command1 parameters & command2 parameters

어쨌든 출력을 구문 분석하려면 이것을 사용하지 않는 것이 좋습니다. 출력이 명령 출력 사이에서 스크램블되는 것을 알았습니다.


4

음, 당신은 두 가지 옵션이 있습니다 : 파이핑 또는 그냥 &:

DIR /S & START FILE.TXT

또는,

tasklist | find "notepad.exe"

파이핑 ( |)은 한 명령의 출력을 가져와 다른 명령에 넣는 데 더 좋습니다. 그리고 ( &)는 이것을 실행한다고 말하고 있습니다.


게시물의 내용 &|기능 및 차이점에 대한 설명을 포함하도록 게시물을 편집 할 수 있습니까? 현재 이러한 개념에 익숙하지 않은 사람들은 자신의 경우 어떤 개념을 사용해야할지 스스로 결정할 수 없습니다.
Mirek Długosz

내가 그랬던 것처럼 내 잘못이야. 게시물을 즉시 수정하겠습니다. 감사합니다.
PyDever

그냥 "찾기"대신 "findstr"이어야합니다
Anu Shibin Joseph Raj

2

아니요 cd / && tree && echo %time%. 반향 시간은 첫 번째 명령이 실행될 때입니다.

배관에는 약간의 문제가 있지만 사람들이 배관 작동 방식을 알고있는 한 중요하지 않습니다.


1

또 다른 예 : 예를 들어 gulp빌드 시스템 을 사용하는 대신

gulp -기본> 빌드

gulp build -빌드 폴더 작성

gulp watch -파일 감시 시작

gulp dist -dist-folder 구축

한 줄로 할 수 있습니다 :

cd c:\xampp\htdocs\project & gulp & gulp watch

1

한 줄에서 변수를 사용하거나 조작하려고 할 때 내용을주의하십시오! 예를 들어 다음과 같은 변수

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

다음과 같이 사용하면 다루기 힘든 많은 문제가 발생할 수 있습니다. %PATH%

  1. 닫는 괄호는 그룹 설명을 종료합니다
  2. 큰 따옴표는 %PATH%괄호 문제를 처리하는 데 사용할 수 없습니다
  3. 그리고 참조 된 변수 %USERPROFILE%에는 무엇이 포함 될까요?

2
Windows CMD에서 한 줄에 두 개의 명령을 실행하는 것과 관련이 있습니까?
Peter Mortensen


0

&한 줄에 명령을 사용하려면 창에서 기호 사용

C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook

우리가 사용하는 리눅스처럼

touch thisfile ; ls -lstrh

-2

간단&& 합니다. 표지판으로 구분하면됩니다 . 예:

echo "Hello World" && echo "GoodBye World".

"Hello World"다음에 "Goodbye World"가 인쇄됩니다.


6
사실과 똑같이 표시되는 오래된 답변이 이미 있지만 여전히 정확하지 않습니다. &&A는 조건부 처음 명령 (ERRORLEVEL = 0) 때 succeded 연산자는 다음 명령은 실행

물론이야. 사람이 두 가지 명령을 실행하고 싶다면 그 두 가지가 정확하고 모든 것이 잘 될 것입니다.
Rajan Dhanowa

1
Rajan : "다음 명령은 첫 번째 명령이 성공한 경우에만 실행됩니다"를 의미합니다.
Ivan

2
" 안녕 세계가 안녕하세요 후 인쇄됩니다 "제공 인쇄가 Hello World실패하지 않았다. @jeb가 말했듯 &&이 조건부입니다. &이전의 성공 여부에 관계없이 명령을 실행합니다.
Pranav A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.