2014-07-08 2 views
0

일부 소프트웨어를 원격으로 배포하려고하는데이 과정을 돕기위한 몇 가지 일괄 처리 스크립트가 있습니다. 제 프로세스의 기본은 scriptA이 통과하는 텍스트 목록을 가지고, scriptA은 대상 파일 (목록에서 검색)에 필요한 파일을 복사하고 ScriptB을 실행합니다. 이 이론은 ScriptB가 시작하자마자 목록의 다음 PC로 이동하고 계속 진행하기 전에 ScriptB가 끝날 때까지 기다리지 않는다는 이론입니다. 내가 가진 것의 기본은 다음과 같습니다 :스크립트를 시작하고 다른 스크립트를 시작하기 위해 이동

ScriptA :

Set /P List= Please enter the list name 
Set /P Name= Please enter your username 
FOR /F %%A IN (%LIST%) DO (
MKDIR \\%%A\C$\Temp\Install 
XCOPY "\\share\necessary files" "\\%%A\C$\Temp\Install" 
PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install\scriptB.bat" 
) 

ScriptB는 설치 프로그램을 실행하고 자체 후 정리합니다.

내가 말했듯이, 목표는 일단 scriptA이 파일을 덮어 쓰고 작업을 시작하면 목록의 다음 PC로 이동한다는 것입니다. 나는 모든 것이 작동하고 있음을 확인했습니다. 위의 의사 코드에서 작동하지 않는 무작위적인 것들은 무시하십시오. 계속 진행하기 전에 설치가 끝날 때까지 기다리기 때문에 영원히 걸립니다.

편집 :

잘못된 파일을 복사 한 것으로 나타났습니다. 원래 'install.bat'로 나열된 것은 scriptB 여야합니다. 사과 드리며, 문제를 설명하는 데 어려움을 겪고있는 상황에서 내 질문을 해결하기가 매우 어려웠습니다.

START PSECEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install\ScriptB.bat" 

그것은 새 창에서 ScriptB을 시작했다,하지만 난 정말 마지막으로 가지고 노력하고있어 :

스크립 : 요청에 따라

, 여기에 내가 시작을 사용하던 방법입니다 제품은 다음과 같습니다

  • 스크립은 PC 이름의 목록에 대한 프롬프트를 얻을 수
  • 스크립는 이달를 통해 목록 복사에서 이름을 가져옵니다 scriptB를 포함하여 네트워크 공유의 모든 파일을 \ temp \ install에 넣습니다.
  • scriptA 방금 파일을 복사 한 PC에서 scriptB가 시작됩니다.
  • scriptB가 실행되는 동안 scriptA가 계속 실행되어 목록의 다음 PC로 파일을 복사하고 전체 PC 목록이 완료 될 때까지 스크립트 B 다음 스크립트 사본을 실행합니다 (
  • ).

이 내용이 명확하게 도움이되기를 바랍니다. 다시 한 번 혼란을 드려 죄송합니다. 위에서 언급 한 모든 단계가 희망대로 작동합니다. 작동하지 않는 유일한 방법은 scriptA를 가져올 수 없다는 것입니다. scriptA를 일시 중지하지 않고 B를 시작합니다 .A는 scriptB를 기다리고, 내가 갖고 싶습니다. 그런 일이 기다리지 않고 계속 진행된다는 것입니다 (하루가 끝날 때이 스크립트를 시작할 수 있고 밤에는 PC 목록을 완료 할 때까지 설치를 계속할 수 있습니다).

도움을 주셔서 다시 한 번 감사드립니다!

답변

0

계속 진행하기 전에 명령이 끝날 때까지 기다리지 않고 START 명령을 사용하여 명령을 실행할 수 있습니다. 이 명령은 동일한 명령 프롬프트 프로세스가 아니라 새로 작성된 명령 프롬프트에서 지정된 명령을 실행합니다.

실행 파일/배치 파일의 경로에 공백이있는 경우 빈 문자열 인수를 첫 번째 인수로 지정해야합니다. 예 :

START "" "C:\Path with spaces\My other script.bat" 

이 첫 번째 인수가 따옴표로 둘러싸여의 경우는 새로운 프로세스를 실행하기 시작하는 새 명령 프롬프트의 제목 인 것으로 간주되기 때문입니다. 빈 인수 (또는 해당 문제에 사용하려는 제목)를 지정하면이 상황을 해결할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 불행히도, 이것이 내가 원하는 것만은 아닙니다. 이것에 대한 나의 생각은 내가 떠나기 전과 떠난 후에 야간에 실행되는이 스크립트를 시작하고 모든 사람이 멀리있는 동안 스크립트를 실행하도록하는 것입니다. 시작 명령을 추가하고 다른 프로세스를 시작할 수 있도록 허용했지만 일단 새 CMD 창을 열면 원본이 일시 중지되었습니다. ScriptA를 일시 중지하지 않고 scriptB를 시작하는 방법에 대한 아이디어가 있습니까? – TheLegNBass

+0

@ TheLegNBass 방금 'START' 명령을 테스트했으며 두 번째 스크립트를 실행하는 동안 호출하는 스크립트를 일시 중지하지 않았습니다. 어쩌면 일부 'ECHO'로 디버깅을하고 어떤 명령이 진행하기 전에 다른 스크립트가 끝나기를 기다리는 지 확인할 수 있습니까? 아니면 한 번에 하나의 'PSEXEC'명령 만있을 수 있습니까? – Laf

+0

나는 그것을 알아낼 수 있었다. 내가 문제를 해결할 때부터 간과 할 수없는 일시적인 일이 멈추었습니다. 나는 지금 그것을 고쳤다. 그리고 그것은 일하고있다. 당신의 도움을 주셔서 감사합니다! – TheLegNBass

0

우리가 실제 문제에서 멀어 질수록 도움을 줄 수있는 능력이 떨어집니다. 더 일반적인 질문 일수록 응답이 모호합니다.

우리는 "ScriptB"에서 "Install.bat"까지 무의미하게 매핑하고 있습니다. 시작 명령을 추가했지만 사용자가 사용했던 곳은 표시하지 않았습니다. 하지만 보장 -

start "installing on %%A" PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install.bat" 

이 문제를 해결해야

PSEXEC \\%%A -u DOMAIN\%NAME% -e "\\%%A\C$\Temp\Install.bat" 

에 변경, 원래 스크립트를 사용하여.

+0

나는 내 질문의 모호함에 대해 사과한다. 나는 그것을 더 명확하게하려고 편집했다. 도움을 주셔서 감사 드리며 편집 내용이 일부 수정 작업에 도움이 되었기를 바랍니다. – TheLegNBass

관련 문제