2009-08-27 3 views

답변

3

글쎄, 가능한지 여부는 배치 파일을 실행 한 방법에 따라 다릅니다.

일반적으로이 기능을 찾을 수있는 유일한 방법은 배치를 시작하는 데 사용 된 명령 줄을 보는 것입니다. 그러나

PS Home:\> gwmi Win32_Process | ? { $_.commandline -match "test\.cmd" } | ft commandline,processid -auto 

commandline        processid 
-----------        --------- 
cmd /c ""C:\Users\Me\test.cmd" "    1028 

: Windows 탐색기에서 배치 파일을 더블 클릭하면 명령 줄을 포함 당신은 다음 Win32_ProcessGet-WMIObject을 사용할 수 있습니다 PowerShell에서

cmd /c ""C:\Users\Me\test.cmd" " 

같은 명령 줄을 얻을 것이다 명령 프롬프트에서 직접 배치를 시작한 경우 배치가 실행 중이고 누가 시작했는지 외부에서 알 수 없습니다.

+0

요하네스, 우수한 답변. +1 명령 프롬프트에서 호출 된 특정 배치 파일을 식별 할 수있는 방법에 대한 내 대답을 확인하십시오. 이 답변에 문제가 있으면 의견을 말하십시오! 감사. – MagicAndi

+0

내가 여기서하고있는 것은 꽤 아니지만. – Joey

+0

요하네스, 꽤 괜찮은 것은 아닙니다. 단지 효과가있는 것을 얻기에 충분합니다. – MagicAndi

1

신뢰할 수있는 방식으로 가능하지 않습니다. 배치 파일 자체는 별도의 프로세스를 시작하지 않고 대신 cmd.exe 인스턴스 내에서 실행됩니다. 실행중인 파일을 신뢰할 수있게 알려주는 특정 프로세스의 내 보낸 데이터가 없습니다.

한 가지 예외는 cmd.exe 인스턴스가 배치 파일을 실행하기 위해 특별히 시작된 경우입니다. 이 경우 응용 프로그램의 명령 줄에 나타나고 배치 파일의 명령 줄을 grep 할 수 있습니다. cmd.exe 프롬프트에서 여러 배치 파일을 실행하더라도이 경우 일반적인 경우는 해결되지 않습니다.

+0

그래, 유효한 대답에 익명 downvote – JaredPar

2

실행중인 배치 파일의 PID를 발견하는 한 가지 방법을 발견했습니다. 당신은 그것을 확인하기 위해 배치 파일에 배치 콘솔 창 제목을 설정해야합니다 :

파워 쉘 스크립트에서
... 
Title MyBatchWindow 
... 

, 당신이 당신의 배치와 일치하는 과정에서 PID를 MainwindowTitle 속성을 확인하고 검색 할 수 있습니다 창 제목 :

$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"} 
$processID = $batchProcess .ID 
... 

나는이 방법을 테스트 한, 그리고 당신이 그것을 더블 클릭하여 배치 파일을 호출 할 경우, 또는 명령 줄에서 호출하여 두 작업이 나타납니다.

+1

같은 창 제목을 사용하는 두 개의 배치가있을 때까지 작동합니다 :-). 하지만 당신이 배치에 대한 통제권이 없다고 생각했습니다. – Joey

+0

이 경우 배치를 제어 할 수 있습니다. 그러나 동일한 배치의 인스턴스가 여러 개있는 경우 위의 대답은 작동하지 않습니다. – MagicAndi

+0

글쎄, 일종의 ... 일괄 처리를 실행하는 프로세스 목록을 얻을 수 있습니다. 그러나 두 번째 줄은 현재 하나의 반환 된 객체를 가정 할 때 달라 보일 것입니다. – Joey

관련 문제