Windows XP 이후의 Windows:창을 표시하지 않고 백그라운드에서 배치 파일을 실행하려면 어떻게 해야 합니까?
같은 질문(Windows 부팅 시 백그라운드에서 배치 파일 실행)에 대해서는 이미 답변했지만 이번에는 배치를 시작해야 합니다.
- 다른 배치로부터
- 콘솔 창은 표시되지 않습니다.
- 모든 인수가 보이지 않는 배치로 전달됩니다.
첫 번째 배지는 콘솔창에서 실행됩니다.단, 두 번째 배치(첫 번째 배치에 의해 비동기 방식으로 시작됨)에서도 콘솔 창이 표시되지 않도록 합니다.
VBScript 스크립트를 작성했습니다.그 스크립트를 다른 사람이 참조할 수 있도록 하고 있습니다만, 다른 아이디어나 솔루션이 있으면, 부담없이 기고해 주세요.
주의: Windows 명령어프로세서의 콘솔 창은 많은 사람들에 의해 올바른 DOS 창이라고 불리고 있습니다.
답변해 주셔서 감사합니다.인비저블 모드로 실행하기 위해 스크립트를 비동기적으로 호출할 필요가 있는 것으로 알고 있습니다.
- 콘솔 창에 이미 있는 두 번째 스크립트로 충분합니다.
- Windows 에서는, 2번째의 창을 기동하지 않아도, 솔루션은 유효합니다.
다음으로 생각할 수 있는 해결책을 제시하겠습니다.
첫 번째 스크립트에서 다음 행으로 두 번째 스크립트를 호출합니다.
wscript.exe invis.vbs run.bat %*
실제로 다음과 같은 vbs 스크립트를 호출하고 있습니다.
- 스크립트의 [path]\name
- ( 「」 「」 「」 「」)
%*
)
다음으로 invis.vbs는 Windows Script Host Run() 메서드를 사용하여 스크립트를 호출합니다.이 메서드는 다음과 같습니다.
- intWindowStyle : 0은 "보이지 않는 창"을 의미합니다.
- bWaitOnReturn : false는 첫 번째 스크립트가 두 번째 스크립트가 완료될 때까지 기다릴 필요가 없음을 의미합니다.
다음은 invis.vbs입니다.
set args = WScript.Arguments
num = args.Count
if num = 0 then
WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
WScript.Quit 1
end if
sargs = ""
if num > 1 then
sargs = " "
for k = 1 to num - 1
anArg = args.Item(k)
sargs = sargs & anArg & " "
next
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
두 번째 배치 파일을 비동기적으로 실행해야 합니까?은 1개의 배치파일과 1개의 배치파일을 합니다.call
두 번째 명령어는 첫 번째 명령어의 창을 공유합니다.
사용할 수 있습니다.start /b
second.bat : 첫 번째 배치파일을 비동기적으로 실행하고 첫 번째 배치파일을 공유합니다.두 배치 파일이 동시에 콘솔에 기록될 경우 출력이 중복되어 판독할 수 없게 됩니다.그리고, 당신은 그것을 넣기를 원할 것이다.exit
번째 파일 를 입력하지 두 배치 파일 내에.1번으로 하다cmd
쉘을 사용할 수 있습니다.
배치 파일을 exe로 변환합니다.Bat To Exec Converter 또는 Online Bat To Exec Converter를 사용하여 Ghost 응용 프로그램(창 없음)으로 실행하는 옵션을 선택합니다.
이것이 DOS 창을 열지 않고 배치 파일을 실행하는 가장 쉽고 짧은 해결책이라고 생각합니다.일련의 명령어를 정기적으로 실행하도록 스케줄 하고 싶을 때 매우 주의가 산만해질 수 있기 때문에, DOS 창이 계속 팝업 됩니다.이것이 해결책입니다.VBS 스크립트를 사용하여 배치 파일을 호출합니다.
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0
Set WshShell = Nothing
위의 행을 편집기에 복사하고 파일을 저장합니다.VBS 내선를 편집합니다.BAT 파일 이름과 경로를 지정합니다.
자기 숨김에는 getCmdPID.bat 및 windowMode.bat을 사용할 수 있습니다.
@echo off
echo --- self hiding bat ----
pause
call getCmdPid.bat
set PID=%errorlevel%
call windowMode.bat -pid %PID% -mode hidden
다음으로 실행한 프로세스의 PID도 반환하려고 했습니다(모든 링크된 스크립트를 다운로드하여 원하는 이름으로 저장할 수 있습니다).
- IEXPRESS 솔루션은 기존 win 95/98 머신에서도 사용할 수 있습니다.Iexpress는 Windows와 함께 패키지화된 매우 오래된 도구입니다.인수는 명령어와 그 인수만 받아들이기 때문입니다.
사용 예:
call IEXPhidden.bat "cmd /c myBat.bat" "argument"
- SCHTASKS - 명령어와 인수 두 가지 인수만 수락합니다.또한 권한 상승으로 시작되었는지 확인하고 가능하면 WEVTUTIL(Vista 이상에서 사용 가능하므로 새 버전의 Windows가 PID를 수신함) 명령을 사용하여 프로세스의 PID를 가져옵니다.
사용 예:
call SCHPhidden.bat "cmd /c myBat.bat" "argument"
- 'WSCript'셸' - 스크립트는 'WScript'의 완전한 래퍼입니다.Shell' 및 가능한 모든 옵션은 명령줄 옵션을 통해 설정할 수 있습니다.jscript/batch 하이브리드로 배트라고 할 수 있습니다.
사용 예(자세한 내용은 도움말을 '-h'로 표시):
call ShellRunJS.bat "notepad.exe" -style 0 -wait no
- 'Win32_ProcessStartup' - 명령줄 인수를 통해 전체 래퍼 및 모든 옵션에 액세스할 수 있습니다.이번에는 일부 Jscript와 VBScript 코드 조각을 포함한 WSF/배치 하이브리드입니다. 그러나 시작된 프로세스의 PID를 반환합니다.프로세스가 숨겨지지 않으면 X/Y 좌표와 같은 옵션을 사용할 수 있습니다(모든 실행 파일에 적용되는 것은 아니지만 cmd.exe는 좌표를 받아들입니다).
사용 예(자세한 내용은 도움말을 '-h'로 표시):
call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindows 0 -title "notepad"
- .NET 솔루션. 대부분의 ProcessStartInfo 옵션이 사용됩니다(다만, 마지막에 너무 피곤해서 모든 것을 포함할 수 없었습니다).
사용 예(자세한 내용은 도움말을 '-h'로 표시):
call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal
다른 사용자 이름으로 실행하거나 "runas"를 사용하거나 Windows Scheduled Tasks에서 다른 사용자로 예약합니다.
다른 질문에서 나는 autoexnt를 제안했다.그것은 이 상황에서도 가능합니다.서비스를 수동으로 실행하도록 설정하기만 하면 됩니다(시작 시 자동으로 실행되지 않음).배치를 실행하는 경우 autoexnt.bat 파일을 변경하여 원하는 배치파일을 호출하고 autoexnt 서비스를 시작합니다.
이를 시작하는 배치 파일은 다음과 같습니다(테스트되지 않음).
echo call c:\path\to\batch.cmd %* > c:\windows\system32\autoexnt.bat
net start autoexnt
이렇게 시작된 배치 파일은 시스템 사용자로 실행되므로 네트워크 공유에 자동으로 액세스할 수 없습니다.그러나 네트워크 사용을 사용하여 원격 서버에 연결할 수 있습니다.
Windows 2003 Resource Kit를 다운로드해야 얻을 수 있습니다.리소스 키트는 Windows XP와 같은 다른 버전의 Windows에도 설치할 수 있습니다.
이미 해답이 있는 건 알지만 누군가 우연히 발견하게 되면 도움이 될 거예요
여기에서는, 전혀 볼 수 없는 백그라운드에서 완전하게 실행할 수 있는 좋은 방법이 있습니다.Taskmgr 또는 Process Hacker를 사용하여 종료하는 방법밖에 없습니다.
여기에는 NirCmd라는 타사 도구가 사용됩니다.
- 다음 코드를 포함하는 스크립트를 만듭니다.
@echo off
nircmd exec hide "MainScript.bat"
원하는 대로 저장하세요."MainScript.bat"은 어떤 것이든 상관없습니다만, 나중에 주의해 주세요.
여기서 앞서 메모한 이름으로 다른 스크립트를 만듭니다.예를 들어 MainScript.bat이라고 하고 다음 코드를 지정합니다.
@echo off
echo Can you see me now?
pause
exit
이것은 백그라운드에서 실행할 코드입니다.
동일한 디렉터리에 있는지 확인하고 NirCmd를 동일한 디렉터리로 다운로드하십시오.
이 스크립트의 결과는 다음과 같습니다.
주의: NirCmd는 툴은 아니지만 도움이 됩니다.
.vbs 파일을 통해 .bat 파일을 실행할 수 있습니다.
다음 코드를 .vbs 파일에 복사합니다.
Dim WshShell
Dim obj
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("C:\Users\file1.bat", 0)
obj = WshShell.Run("C:\Users\file2.bat", 0) and so on
set WshShell = Nothing
를 사용할 수도 있습니다.
start /MIN notepad.exe
PS: 유감스럽게도 최소한의 창 상태는 실행하는 명령어에 따라 달라집니다.V.G.가 작동하지 않음
start /MIN calc.exe
언급URL : https://stackoverflow.com/questions/298562/windows-xp-or-later-windows-how-can-i-run-a-batch-file-in-the-background-with-n
'source' 카테고리의 다른 글
월별 및 연도별 SQL 그룹화 (0) | 2023.04.19 |
---|---|
Excel 어레이에 논리 OR을 적용하는 방법 (0) | 2023.04.14 |
Excel에서 셀의 첫 번째 문자를 다른 셀과 결합하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
큰 xlsx 파일에서 판다 DataFrame을 로드하기 위한 진행 표시줄을 만들려면 어떻게 해야 합니까? (0) | 2023.04.14 |
각 행을 구분하지 않고 파일을 동일한 부분으로 분할하려면 어떻게 해야 합니까? (0) | 2023.04.14 |