“배치 작업 종료 (Y / N)”확인을 억제하는 방법은 무엇입니까?


153

cmd에서 Ctrl + C를 누르면 대상 응용 프로그램이 종료되지만 배치 파일에서 대상 응용 프로그램을 호출하면 "일괄 처리 종료 (Y / N)"확인 메시지가 나타납니다. 배치 작업을 종료하지 않기로 선택한 인스턴스를 기억할 수 없습니다. 이 확인을 어떻게 건너 뛸 수 있습니까?


sgmoore의 답변을 시도한 적이 있습니까? superuser.com/questions/35698/…
Arjan

10
"배치 작업을 종료하지 않기로 선택한 인스턴스는 절대 기억할 수 없습니다." 그리고 실제로, 대부분의 경우, 아니요라고 대답하더라도 작업이 종료됩니다.
PhiLho

@PhiLho-입력 한 후에도 스크립트가 항상 계속되므로 사실이 아닙니다 N. 입력 한 후 배치 스크립트가 종료되는 시나리오가 궁금합니다 N.
dbenham

나는 이것이 쉬워지기를 바랐지만, 평소와 같이 Microsoft는 엉덩이에 무언가를 간단하게 만들었습니다. 아래의 답변은이 작은 성가심을 피하기 위해 너무 많은 노력을 기울이고 있습니다. 나는 이것을 해결하는 간단한 방법이 없다는 것이 화가났다. 진심으로 Microsoft,이 프롬프트의 요점은 무엇입니까? 네, 확실합니다. 그래서 Ctrl + C를 누르십시오.
Chev

이 문제는 적어도 -ncygwin 스위치를 더 자주 기억하고 사용하게합니다 .
palswim

답변:


53

이 동작은 의도적으로 설계된 것으로 명령 인터프리터에 의해 제어됩니다. 인터프리터를 직접 디 컴파일하고 재 컴파일하지 않는 한 이것을 "매핑"또는 "차단"하는 방법은 없습니다.


39
실망 스럽다 :(
Srikanth

네 실망입니다. 더욱 실망스러운 점은 기본적으로 XP에서 아무 것도 수행하지 않는 BREAK 명령을 사용하여 프롬프트를 전환 할 수 있다는 것입니다.
Synetech

3
비록 인터프리터가 다르게 행동하도록 만들 수는 없지만, superuser.com/questions/35698/start 에서 제안 된 sgmoore과 같은 것을 사용 하면 완벽하게 훌륭한 해결책이 될 것입니다.
Arjan

1
여기 있습니다 : superuser.com/a/498798/56101
Totty.js

57

Ctrl+를 C두 번 누릅니다 .


5
이것은 작동하지 않지만 프롬프트를 반복합니다.
Joey

8
방금 데이터베이스를 종료했습니다! 스크립트는 "일시 정지"대기 중이므로 CTRL-C를 수행 한 다음 프롬프트가 표시되어 CTRL-C를 다시 수행 한 후 배치 파일 hapilly가 수행되어 데이터베이스를 삭제했습니다! @see superuser.com/questions/740004/…
Sebastien Diot

2
그것은 OP가 요구 한 것이 아닙니다. ^ C 다음에 "N"을 입력해도됩니다.
vladr

3
@vladr이 잡아 무한 쉽게 Ctrl및 탭 C타격 대 다시 Y다음 Enter.
Nick T

20
@SebastienDiot 데이터를 영구적으로 파괴 할 가능성이있는 스크립트에서 새로운 기술을 사용해 보셨습니까? 저건 ... 용감합니다.
기본

57

사이트 에서 효과적인 해결책을 찾았습니다.

script2.cmd < nul

매번 이것을 입력하지 않아도 script.cmd위의 줄과 같은 폴더에 두 번째 스크립트를 만들었습니다 . 이 기술은 XP에서만 테스트했지만 다른 사람들은 Win 7에서 확인했습니다.

Nathan은 다음과 같이 덧붙입니다. 또 다른 옵션은 다음 코드를 script.cmd의 맨 위에 두어 하나의 파일에서 동일한 작업을 수행하는 것입니다.

rem Bypass "Terminate Batch Job" prompt.
if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

2
CALL 명령을 사용하지 않고 자체적으로 배치 파일을 호출하면 실행이 "영구적으로"전송됩니다. STDIN이 NUL로 경로 재 지정된 경우에도 "일괄 처리 종료"프롬프트가 계속 표시되지만 입력을 기다리지 않습니다 (STDIN이 없어지기 때문). 이것은 나를 위해 작동합니다 ...
윌리엄

3
이것은 Windows 7에서 작동합니다.
William

17
배치에 사용자 입력이 필요하지 않으면 작동합니다.
Augusto Men

2
@ William, 그냥 스크립트를 호출해도 효과가 없었지만 해결책을 찾았습니다 @IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command]). 재귀 적으로 호출하지만 두 번째로 인수합니다. 스크립트에 인수가 있으면 사용하지 않은 첫 번째 위치 인수를 사용할 수 있습니다. 스크립트에 많은 인수가있는 경우 문제가 될 수 있습니다. 내 스크립트에는 인수 또는 사용자 입력이 필요하지 않았습니다.
jpmc26

jpmc의 대답이 나를 위해 일했습니다. darn Terminate (y / n)를 에코합니까? 메시지는 그때 끝나지 만 멈추지 않습니다.
ggb667

28

Clink를 설치 하고 "terminate_autoanswer"설정을 변경하십시오. 설정 파일은 여기에 있어야한다 : C:\Users\<username>\AppData\Local\clink\settings.

# name: Auto-answer terminate prompt
# type: enum
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
# disabled, 1 = answer 'Y', 2 = answer 'N'.
terminate_autoanswer = 1

그런 다음 cmd.exe 창에서 "작동합니다". cmd.exe에서 피기 백이 교착 상태이므로 실행중인 항목을 변경하지 않아도됩니다.

Frickin 'awesome, IMO!


Clink는 환상적이지만 cmd.exe 또는 Console2를 사용하면 작동하지 않습니다. 여전히 묻고 자동 완성되지 않습니다.
iono

@tometoftom : 위와 같이 설정 파일을 변경 했습니까? 나는 그것을 작동시키기 위해 그렇게해야했습니다. (Windows Vista 이상에서 파일을 올바르게 저장하려면 관리자 여야합니다 ...)
Macke

3
아, 아직 주사위가 없습니다. 하나님을 위해 마이크로 소프트 한숨을 쉬며 ...
iono

3
@iono 영어 이외의 Windows 버전이 있습니까? 이 경우 며칠 전에 0.4.3 릴리스까지 clink가 프롬프트에 자동으로 응답 할 수 없었습니다. github.com/mridgers/clink/releases/tag/0.4.3
schlamar

3
관련 : cmder 를 사용하는 경우 설정이 켜져 \cmder\config\settings있습니다. 여기에 관련된 문제를 참조하십시오 github.com/cmderdev/cmder/issues/1666
edmundo096

17

응용 프로그램이 정상적으로 완료된 후 배치 파일에서 아무 것도 할 필요가없는 경우 start명령 을 사용하면 Ctrl-C를 누를 때까지 배치 파일이 이미 완료됩니다. 따라서 메시지가 나타나지 않습니다.

예를 들면 다음과 같습니다.

@ 에코 오프

my_command = ping.exe 설정
my_params = -t www.google.com 설정

echo 'start'에 의해 실행될 명령 : % my_command % % my_params %

:: / B 또는 / WAIT를 사용하지 않으면 새 창이 생성되지만
::이 배치 파일의 실행은 현재 창에서 계속됩니다.

% my_command % % my_params % 시작

에코.
echo이 줄은 'start'가 끝나기 전에 실행됩니다. 그래서 이건
에코 배치 파일은 다른 창에서 Ctrl-C를 누르기 전에 완료됩니다.
에코.

:: 테스트를 위해 '일시 정지'를 사용하여 "계속하려면 아무 키나 누르십시오"를 표시하십시오.
:: 'echo'명령의 출력. 창에서 Ctrl-C를 눌러야합니다
:: 'ping'명령을 실행합니다 (이 창에는 아님). 또는 단순히 제거
:: 혼란스러운 다음 줄 :

중지

(Windows XP에서 테스트되었습니다.)


start실제로 도움이 될지 모르겠지만 그럴듯하게 들립니다. downvote가 이것이 작동하지 않는다는 것을 암시하는지 궁금합니다. 아니면 downvoted 누구든지 Windows ' start(또는 특히 start /waitand start /b) 명령을 모르 십니까? microsoft.com/resources/documentation/windows/xp/all/proddocs/… 를 참조하십시오 . 공감 비를 설명해주세요.
Arjan

start작동하지 않습니다. cmd가 배치 파일을 실행할 때마다 Ctrl + C를 누르면 현재 실행중인 프로세스가 종료되고 질문이 표시됩니다.
Joey

1
+1이 나를 위해 일합니다. 그러나 / b는 Ctrl + C 처리를 해제합니다 (성가시다).
Nick Bolton

3
배치 파일을 두 번 클릭하면 좋습니다. 그러나 콘솔에서 배치 파일을 시작하면 어떻게됩니까?
Helgi

8
(XP에 적용 가능한지 확실하지 않은 Windows 7과의 대화) 마이크로 소프트 가 명령 을 코딩하기 위해 고용 한 생각 하지 않은 개발자는 창 제목 을 필수와 선택 사항으로 동시에 혼란스럽게 결정했습니다. 따라서 큰 따옴표로 묶인 경우 창의 제목 이되고 첫 번째 매개 변수 는 명령이 됩니다. 안전을 위해을 사용하십시오 . 대부분 제목을 설정하기 위해 또는 옵션을 사용하지 않고 개발자를 사용 하고 저주합니다 . start%my_command%%my_params%start "some title here" %my_command% %my_params%""/TITLE/T
ADTC

13

나는 "일괄 처리 종료"프롬프트를 잠시 피하기 위해 이러한 열망과 싸우고있다.

내 최신 주현절은 하나의 인스턴스 cmd.exe를 다른 인스턴스로 교체하여 약간 손이 얇습니다 (또는 콘솔 창) . 이것은 파일 에서 start cmd /k즉시 명령 / 프로그램을 실행하여 수행됩니다 . exit.BAT

원래 콘솔 창이 사라지고 Ctrl- 를 통해 교체 콘솔을 깨끗하게 중지 할 수 있습니다 C.

+ 에 traceroute의해 중단 되거나 완료되어 사용자를 프롬프트 로 되돌릴 수있는 다음 예제를 고려하십시오 .CtrlCC:\>

@echo off

set timeout=100
if not "%2"=="" set timeout=%2

start cmd /k tracert -w %timeout% %1
exit

새로운 명령 해석기의 환경 대체는 모든 사람을위한 것이 아니라 육안으로는 나를 위해 잘 보이고 잘 작동합니다.


+1 매우 참신한 접근 방식이며 ti가 정확한 대체품이 아니라는 데 동의하지만 잘 작동합니다 ( "cmd.exe 교체"를 사용하여 게시물을 시작할 때 걱정이되었지만 예에 도달 할 때까지 보안 경보가 울 렸습니다. 의미)
기본

exit /b배치 스크립트를 종료하는 데 사용해야 합니다
Sebastian Godelet

1
@SebastianGodelet : 일반적으로 좋은 조언이지만 여기서는 대상 명령이 창 에서 시작된다는 것을 고려할 때 실제로 원래 콘솔 을 닫으려는 의도입니다 .
mklement0

"/ c"대신 "cmd / k"(인터프리터를 열어 둔 상태)를 사용하는 이유는 무엇입니까? 명령의 출력을 볼 수 있습니까?
Raúl Salinas-Monteagudo

9

외국인의 솔루션은 좋지만, 인수 목록 (예를 전달할 스크립트와 함께 잘 작동하지 않습니다 python myscript.py %*때문에) SHIFT업데이트하지 않습니다 %*. 있습니다 해결 방법이 있지만 특정 제한이있다.

내가 끝내었던 수정 사항은 다음과 같습니다.

IF [%JUSTTERMINATE%] == [OKAY] (
    SET JUSTTERMINATE=
    python myscript.py %*
) ELSE (
    SET JUSTTERMINATE=OKAY
    CALL %0 %* <NUL
)

완벽한 99. (9) %.


myscript.pystdin에서 읽으려면 작동하지 않습니다 .
jamesdlin


0

필자의 경우 배치 작업을 불확실하게 유지하고있는 것은 내 사용자 디렉토리 (Vista의 C : \ Users \ 또는 XP의 C : \ Documents and Settings \)에있는 ping.bat 파일이었습니다.

이 배치 파일은 현재 디렉토리가 내 사용자 디렉토리 인 명령 프롬프트에서 ping을 실행할 때마다 실행되었습니다. 실행 창 또는 다른 사용자의 디렉토리에서 Ping-ing이 제대로 실행되고있었습니다.

내 사용자 디렉토리에서 파일을 제거하고 문제가 해결되었습니다!


0

시작 작동하지만 이제 배치 파일로 열린 창이 내가 가진 옵션에서 변경되고 "속성"이 비활성화됩니다 (응답하지 않음).


0

명령 끝에 <nul을 추가하여 배치 stdin을 null로 리디렉션하면됩니다.


2
<nul을 의미했을 수도 있습니다 (> nul은 모든 stdout을 null로 보냅니다).
Brian Phillips

0

종료시 부모 배치에 ^ C를 던지는 것처럼 보이는 EXE 로이 문제가 발생하여 깨끗한 종료에서도 "일괄 처리 작업 종료"프롬프트가 나타납니다.

내가 사용하기로 선택한 솔루션은 다른 답변과 비슷하지만 PowerShell 프롬프트 (또는 원하는 경우 CMD의 PowerShell 해석기 방법)를 통해 "시작"을 사용하여 배치를 실행했습니다.

이제 2018 년이며 Windows 10에서 Microsoft는 기본 명령 프롬프트로 PowerShell을 사용하여 CMD를 대체하기 시작했으며 기본적으로 GUI에서 쉽게 사용할 수 있습니다.

StartStart-Process 의 별명입니다 .

실행되면 그냥 시작하고 돌아옵니다. 따라서 시작된 프로세스를 중지하면 "일괄 처리 종료"프롬프트가 표시되지 않습니다.

기본적으로 기다리지 않으므로 명령 이외의 추가 인수가 없으며 인수가 필요합니다.

start mything.exe -mythings -arguments내 배치에서 사용하면 완벽하게 작동했습니다.

PowerShell 스크립트에서 시작하려면 경로가 앞에 와야하므로 배치 파일을 다음과 같이 실행하십시오 .\host.bat.


0

무료 CMD 교체 인 TCC / LE (CMD ++로 생각)는 배치 종료 작업 프롬프트를 억제하는 옵션이 있습니다. TCC 시작 구성 대화 상자 에서 옵션을 찾을 수 있습니다 .

Ctrl-C에서 배치 파일 취소 : Control-C를 누를 때 일반적인 프롬프트없이 배치 파일 처리를 취소합니다.

스크린 샷 :

TCC / LE 옵션

이전에 TCC / LE에 대해 들어 본 적이없는 경우 다음 사이트에서 볼 수있는 몇 가지 문제점이 있습니다.

TCC / LE는 CMD 명령 줄 (기본 Windows 명령 프롬프트)을 대체합니다. TCC / LE는 111 개의 내부 명령 (CMD는 40보다 작음), 240 개의 내부 변수 및 함수, 기존 CMD 명령에 대한 수백 가지의 향상된 CMD의 상위 집합입니다.

TCC / LE는 기존 명령 줄 응용 프로그램 및 배치 파일과 함께 작동하지만 명령 줄 및 배치 파일 기능이 크게 개선되었으며 명령 프롬프트 창에 수천 가지 새로운 기능이 추가되었습니다.

나는 몇 년 동안 TCC / LE를 사용했고 그 전에는 4NT를 사용했습니다. 나는 그것을 많이 사랑하고 그것을 추천 할 수 있습니다. 여전히 사용하지 않는 이유는 PowerShell을 거의 독점적으로 사용하기 때문입니다.


0

"배치 작업 종료 (Y / N)"를 억제하는 주된 이유는 루프에서 프로그램을 실행하는 것입니다 (예 : 충돌시 다시 실행).

https://stackoverflow.com/a/8185270/1170023 이이 솔루션으로 이어졌습니다.

@ECHO OFF
rem assumes you have installed pslist from sysinternals to windows PATH

:RUN
echo Starting GoldenEye Dedicated Server
start "" srcds.exe -console -game gesource +maxplayers 16 +map ge_complex

:LOOP
pslist srcds >nul 2>&1
if ERRORLEVEL 1 (
  goto RUN
) else (
  rem echo Dedicated server is still running
  timeout /t 5 >nul
  goto LOOP
)

-2

Hyper 터미널 을 사용하는 경우 확인을 억제하는 가장 쉬운 방법 은 hyper-yes 플러그인 을 추가하는 것 입니다.


왜 공감해야합니까? Hyper 만 사용할 때 표시했습니다. 실제로 Windows를 사용할 때 사용하는 훌륭한 솔루션입니다.
Ricky Boyce

1
문제는 cmd.exe에 관한 것입니다.
Raúl Salinas-Monteagudo

-3

스크립트의 끝에 다음 명령을 추가하십시오.
echo
이렇게하면 스크립트의 동작이 "손상되지"않으며 CDM에서 배치를 종료 할 것인지 묻지 않습니다.


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