완전히 숨겨진 방식으로 배치 파일을 실행하십시오.


139

사용자에게 아무것도 표시되지 않고 (창 없음, 작업 표시 줄 이름 없음 등) 배치 파일 (.bat)을 실행하는 방법을 찾고 있습니다.

나는 그것을하기 위해 일부 프로그램을 사용하고 싶지 않습니다. 나는 더 깨끗한 것을 찾고 있습니다. VBScript를 사용 하는 솔루션 을 찾았 지만 실제로 VBS를 사용하는 것을 좋아하지 않습니다.


하하! 기필코 아니다. 때때로 배치 파일을 실행할 Windows 서비스를 개발 중입니다.
Moayad Mardini

4
Windows 서비스는 배치 파일로 실행되지 않습니다. 그들은 서비스로 운영됩니다. 당신은 질문을 명확히해야합니다-서면으로 의견이 있으면 나에게 이해가되지 않습니다.
CarlF

1
배치 파일을 실행하는 Windows 서비스가 있습니다. 서비스가 배치 파일이 아닙니다.
Moayad Mardini

1
어떤 언어로 서비스를 작성하고 있습니까?
휴 알렌

hstart도 있습니다.
barlop

답변:


119

해결책 1 :

이 한 줄의 텍스트를 파일로 저장하십시오 invisible.vbs.

CreateObject ( "Wscript.Shell"). "" ""& WScript.Arguments (0) & "" "", 0, False를 실행하십시오.

프로그램 또는 배치 파일을 보이지 않게 실행하려면 다음과 같이 사용하십시오.

wscript.exe "C : \ Wherever \ invisible.vbs" "C : \ 일부 다른 장소 \ MyBatchFile.bat"

또한 인수 목록을 전달 / 릴레이하려면 두 개의 큰 따옴표 만 사용하십시오.

CreateObject ( "Wscript.Shell"). ""& WScript.Arguments (0) & "", 0, False를 실행하십시오.

예: Invisible.vbs "Kill.vbs ME.exe"

해결책 2 :

명령 줄 도구를 사용하여 프로세스를 자동으로 시작하십시오. Quiet , hidecon 또는 hideexec .


2
왜 큰 따옴표 4 개를 설명해 주시겠습니까?
Starx

숨겨진 프로그램을 시작해야한다면 어떻게해야합니까?
Starx

5
@Starx VB 구문. &연결 문자열을 의미합니다. 문자열은 큰 따옴표 ( ") 로 묶습니다 . ""문자열 분리 문자 안에 연속 된 큰 따옴표 ( )는 리터럴 큰 따옴표 ( ")를 의미합니다 . 따라서 네 개의 큰 따옴표 ( """")는 한 문자의 문자열 리터럴, 큰 따옴표 ( ")입니다. 그것을 함께 넣고 """" & WScript.Arguments(0) & """"될 것입니다 "<argument>", 어디 <argument>스크립트에 전달 된 첫 번째 명령 행 인수입니다.
Bob

4
모든 인수를 전달하도록 수정하는 방법은 무엇입니까? 인수를 인용하지 않고 전달하는 것이 더 편리합니다.
Ctrl-C

2
그래도 wscript.exe "C:\Wherever\invisible.vbs" ...내부에 넣을 수있는 배치 파일을 만들어야 합니까?
endolith

26

배치 파일 또는 명령 파일 또는 파일을 숨기려면 ... Windows XP 기본 제공 IExpress.exe유틸리티를 사용하여 배치 파일에서 .EXE를 빌드하십시오. 사용할 때 IExpress실행 숨겨진 옵션을 확인하고 아무것도 표시하지 않도록 모든 상자를 선택하십시오. .exe를 만든 후 선택한 실행 명령 폴더에 파일을 저장하면 해당 파일이 나타나지 않습니다.


1
오, 실제로 좋은 해결책입니다.
Camilo Martin

7
Windows 7과 같은 최신 Windows 버전에서 lexpress.exe와 동등한 것이 있습니까?
Sнаđошƒаӽ

@ Sнаđошƒаӽ 그것은 윈도우 7에 있습니다. ... 그냥 테스트
DarthRubik

@DarthRubik 공유해 주셔서 감사합니다. 나도 그것을 테스트했고 잘 작동합니다. 답을 공표 할 시간입니다. :)
Sнаđошƒаӽ

"Command.com"이 더 이상 존재하지 않는 것 같으므로 Windows 10 64에서 작동하지 않는 것 같습니다
Arne S

10

Cmdow 사용 은 NT4 / 2000 / XP / 2003 용 Win32 명령 줄 유틸리티로, 창을 나열, 이동, 크기 조정, 이름 변경, 숨김 / 숨김 해제, 비활성화 / 활성화, 최소화, 최대화, 복원, 활성화 / 비활성화, 종료, 종료 및 종료 가능 더.

매개 변수를 전달하여 숨겨진 배치 파일을 실행하십시오.

cmdow / run / hid mybat arg1 "arg 2"


그러나이 명령을 어떻게 실행합니까?
Moayad Mardini

9
cmdow는 대부분의 바이러스 백신 제품에서 맬웨어로 탐지됩니다. 따라서이 솔루션을 PC 이외의 장소에서는 사용하기가 어렵습니다.
Ganesh R.

@Ganesh : 더 나은 솔루션?
Moayad Mardini

오픈 소스입니까? harrymc의 1 행 vbscript를 실행하여 동일한 작업을 수행 할 수있는 오픈 소스가 아니며 트로이 목마를 포장 할 수있는 타사 앱을 사용할 필요는 없습니다 (스레드 맨 위에 응답 참조).
thebunnyrules

1
글쎄, 그것은 오픈 소스이므로 꽤 훌륭합니다. : 여기에 소스 코드를받을 수 github.com/ritchielawrence/cmdow
thebunnyrules

9

배치 파일이 한 줄에 너무 많은 문자를 넣을 수있는 경우 임의의 디렉토리에있는 폴더 내부를 마우스 오른쪽 버튼으로 클릭하여 바로 가기를 사용하고 나머지 마법사를 건너 뛰고 마지막으로 만든 바로 가기를 마우스 오른쪽 버튼으로 클릭하십시오. 속성을 클릭하고 대상 아래에 일반적으로 박쥐 파일에 넣을 내용을 입력하십시오. 그리고 삼촌 밥!

장점 :

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

단점 :

 Limited to one line, so many characters

유일한 문제는 파일 형식을 바로 가기와 연결할 수 없다는 것입니다. 따라서 탐색기에서 배치 스크립트를 두 번 클릭하여 배치 스크립트로 열려면 여전히 .bat 파일이 필요합니다.
Björn Lindqvist

나는 아직도 아저씨 밥을 찾으려고 노력하고 있습니다.
Pimp Juice IT

7

대화식으로 작성하지 않고 at 작업을 통해 스크립트를 실행하십시오.

at 11:00 script.bat

또 다른 솔루션은 파이썬과 같은 것을 설치하는 것이 마음에 들지 않으면 간단히 스크립트를 작성하고 pythonw(GUI 작업을위한 링크 된 버전)으로 실행할 수 있습니다. 그래픽 API를 사용하지 않기 때문에 창이 표시되지 않습니다. 단순히 호출을 사용 os.system()하면 명령 줄에 문자열을 입력하는 것과 동일하므로 배치 스크립트를 모방합니다.

예:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")

3
그러나이 명령을 어떻게 실행합니까?
Moayad Mardini

예약 된 작업을 예약하거나 서비스를 작성해야합니다.
Unfundednut

예가 추가되었습니다.
John T


6

Windows7을 사용하면 "예약 된 작업"제어판을 사용하여 배치 파일이 지정된 권한으로 "SYSTEM"계정으로 보이지 않게 백그라운드에서 실행되도록 예약 할 수 있습니다. 아래 스크린 샷을 참조하십시오 :

여기에 이미지 설명을 입력하십시오

또한 기능이 많지는 않지만 '/ interactive'옵션없이 "AT.exe"명령을 사용하여 명령 줄에서 이와 같은 보이지 않는 배치 스크립트 작업을 만들 수도 있습니다.


3
숨겨진 확인란은 작업 스케줄러 사용자 인터페이스에서 작업을 숨 깁니다 (
Sourav Ghosh

나쁜 생각으로“SYSTEM”권한이 필요하지 않을 때 (그리고 보안 약점에 대해 면밀히 조사되고 강화되지 않은) 작업을“SYSTEM”으로 실행; 여기에 의견을 참조 하십시오 .
Scott

6

VBScript 솔루션이 마음에 들지 않습니다.

nircmd.exe 를 다운로드 하여 %systemroot%\system32폴더에 복사 한 다음 배치의 첫 번째 줄에이 명령을 추가하십시오.

nircmd.exe win hide ititle "cmd.exe"

또는 다음 과 같이 title모든 cmd창 을 숨기지 않도록 명령으로 배치 제목을 먼저 사용자 정의 하십시오.

title MyBatch
nircmd.exe win hide ititle "MyBatch"

이 정확한 방법을 사용하지만 nircmd가 cmd 창을 숨기지 않고 작업 표시 줄로 최소화하여 클릭하여 복원 할 수없는 시간 동안 실패했습니다. 이유를 모릅니다 ...
James Yang


3

오토 핫키 스크립트를 생성 할 수도 있습니다 :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 

3

C / C ++의 또 다른 방법은 CREATE_NO_WINDOW 플래그와 함께 CreateProcess 함수를 사용하는 것입니다. 여기에 표시되지 않은 추가 전원이 많이 있습니다. 이것은 system () 또는 _spawn () 제품군을 교체하는 데 필요한 최소값입니다.

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

1
WINAPI 접근 방식에 대한 정답. 다음은 답변 외에도 소스 코드 및 응용 프로그램 입니다.
Alex

3

우수한 Bat To Exe Converter 는 귀하 .bat또는 .cmd파일을 파일 로 변환합니다 .exe.

간단한 UI가 있습니다. “보이지 않는 응용 프로그램”옵션을 선택하여 콘솔 창을 가지지 않도록 선택할 수 있습니다. 또한 아이콘, 패키지 관련 파일 및 기타 여러 옵션을 지정할 수 있습니다.

기본 인터페이스 창의 스크린 샷은 다음과 같습니다.


이 이미지는 오래되었습니다. 버전 2.4.8이 표시되며 2018 년 9 월 현재 웹 사이트는 버전 3.0.10.0 (최종 업데이트 2018-03-23)을 제공합니다.

경고 :에 www.f2ko.de 웹 사이트에 링크 coinhive.com되어 널리 확인 으로 악성 코드 .


2

이 방법 으로 nircmd를 사용 하여 성공적으로 수행했습니다 .

  1. 링크 에서 nircmd.exe를 다운로드 하십시오.
  2. .bat 파일을 만드십시오
  3. .bat 파일의 첫 줄은 다음과 같아야합니다. nircmd.exe win hide ititle "cmd.exe"
  4. winrar를 사용하여 두 파일을 모두 선택하고 자동 압축 풀림 파일을 작성하십시오.
  5. "일반"탭에서 "자동 추출 파일 작성"상자를 체크하십시오
  6. "고급"탭에서 "자동 추출"버튼을 선택하십시오
  7. 새 창이 있고 "모드"탭을 선택한 다음 "모든 항목 숨기기"옵션을 선택하십시오.
  8. "업데이트"탭을 선택하고 "기존 파일 덮어 쓰기"옵션을 선택하십시오.
  9. "일반"탭을 선택하고 원하는 경우 추출 할 대상 폴더를 정의하고 "추출 후 예외"상자에 .bat를 추출 할 전체 경로를 작성하십시오. 예 : 압축 풀기 폴더를 "c : \ windows \"로 정의하면 압축 해제 후 실행되는 전체 경로는 "c : \ windows \ file.bat"입니다 (.bat의 이름은 file.bat입니다). )
  10. 모든 창에서 수락을 클릭하십시오

이제 .exe 파일을 만들었습니다. .exe 파일을 클릭하고 설치하면 .bat 파일이 완전히 숨겨집니다.


1
cmdow /run /hid "file.extention" arg1 "arg 2"

3
명령에 대한 간단한 설명을 포함하십시오. 이를 통해 OP (및 기타)는 명령을 복사하여 사용하는 대신 작동 방식을 이해하는 데 도움이 될 수 있습니다.
BloodPhilia


'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco

1

특별한 조치를 취할 필요는 없습니다.

Windows 서비스에서 배치 파일을 실행하는 경우 서비스에서 "서비스가 데스크톱과 상호 작용하도록 허용"옵션을 활성화하지 않으면 기본적으로 숨겨져 야합니다.


1

중복 된 이후 다른 게시물 에서 내 답변을 여기에 추가하면 이 솔루션이 보이지 않으므로 이제 배치 파일을 숨길 수있는 방법에 대한 17 가지 답변이 있습니다. 가까운 시일 내에 해당 게시물에 대한 답변을 삭제하겠습니다.

배치 논리와 명령을 사용하여 배치 스크립트를 만든 다음 .VBS확장명을 가진 새 파일을 만들고 아래 논리를 사용하고 (아래 제공된 예) , 등으로 명령 .CMD또는 .BAT파일 의 전체 경로를 연결하십시오 PING -t <IPAddress>. 배치를 실행할 때 명령 창을 표시하지 않는 숨겨진 방식으로 배치를 실행합니다.

아래 예제의 로직 C:\Folder\BatchFileName.cmd이 수동으로 실행하는 명령 등을 사용하여 배치 스크립트를 가리 키도록 변경을 지정 하는 경우.

.VBS파일을 저장하고 필요에 따라 무기한 스케줄로 실행되도록 Task Scheduler windows7 에서 태스크 스케줄 문제점으로 파일을 스케줄하십시오 .

그렇지 않으면 .VBS파일을 두 번 클릭하여 필요 PING에 따라 배치 파일에 넣은 무한 명령 을 실행하십시오 .

참고 : 나는에서이 스크립트 로직을 가지고 있지만 배치 파일을 실행할 때 숨겨진 명령 창을 보장하기 위해 당신이 여기에서 필요로 같은 목적을 위해 안정적으로 작동하는 곳이라고 생각 서버 오류 소스

예 VBS 스크립트 실행 명령 줄 일괄 처리 명령 창

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing

1

여기서는 외부 도구없이 일괄 처리로 숨겨진 프로세스를 시작하는 모든 방법을 편집했습니다. 스크립트를 사용할 준비가되어 있고 (일부는 스크립트가 풍부합니다) 명령 줄을 구성합니다. PID가 반환됩니다. 사용 된 도구는 IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process 및 JScript.Net입니다.


1

이미 대답했지만 여기에 또 다른 접근법이 있습니다. 다른 점은 배치 스크립트가 실행되는 동안 스스로 숨길 수 있다는 것입니다. 윈도우 모드 .batgetCMDPid.bat (두 .net코드 가 모두 포함되어 있음 ) 라는 추가 스크립트가 필요합니다 . 다음에 어떻게 사용할 수 있습니까?

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit

0

나는 같은 문제가 있었지만 알아 냈습니다.
Shell("filehere" & "parametersforbatchfilehere", vbHidden)


0

나는 이것을 알아 내려고 시도했지만 실제로 성공하지 못했습니다. 이것은 내가 얻은만큼 가깝습니다.

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul

0

탐색기 컨텍스트 메뉴에서 호출 된 배치 파일의 창을 숨겨야했고 매개 변수에 따옴표를 추가해야했습니다. 어떤 대답도 나를 위해 효과가 없으므로 내 솔루션을 추가하고 있습니다.

탐색기 상황에 맞는 메뉴의 레지스트리 "명령"에 이것을 사용했습니다.

cmd /c C:\mypath\myprogram.bat "%1"

그래서 그것을 대체하기 위해 다음과 같은 vbs를 만들어야했습니다.

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

같은 곳에 저장 C:\mypath\myscript.vbs하고 레지스트리에서 다음과 같이 호출하십시오.

wscript "C:\mypath\myscript.vbs" "%1"

.bat 경로는 공백을 사용할 수 없으므로 8.3 파일 이름으로 바꾸십시오. 예를 들어 C:\Program Files\myprogram.bat로 참조해야 C:\Progra~1\myprogram.bat합니다. 8.3 파일 이름을 보려면dir /x


0

그런 작업을 수행하고 프로덕션 환경에서 사용하기 위해 RunApp 을 만들었습니다 . 도움이되기를 바랍니다.

아래와 같은 구성 :

파일 : config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

runapp.exe대신 시작하십시오 .


-1

이것은 Windows 8 (아마도 다른 사람)에서 작동합니다

  1. 평소와 같이 배치 파일을 만듭니다.
  2. 배치 파일에 대한 바로 가기 만들기
  3. 바로 가기> 속성을 ​​마우스 오른쪽 버튼으로 클릭하십시오.
  4. 레이아웃을 클릭하십시오
  5. "시스템 위치 창을 보자"
  6. 왼쪽 위치를 설정 tp -1000
  7. 적용을 클릭하십시오

  8. 바로 가기를 클릭하면 실행되지만 표시되지 않습니다. :)


4
정말? 작업 표시 줄에 버튼으로 표시되지 않습니까?
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.