2014-01-15 2 views
0

단순히 32 비트와 64 비트 시스템간에 파일을 여는 데 같은 스크립트를 사용하고 싶습니다. 따라서 cannot locate error을 방지하기 위해 IF EXISTS을 사용하고 싶습니다.
이 스크립트는 믿을 수 없을만큼 간단하고 쉬워야하지만 몇 가지 문제가 있습니다.IF EXIST START .bat

if exist "C:\Program Files (x86)\Expro4\Expro4.exe" (
    Start "C:\Program Files (x86)\Expro4\Expro4.exe") 

if exist "C:\Program Files\Expro4\Expro4.exe" (
    Start "C:\Program Files\Expro4\Expro4.exe") 

다른 변형을 시도했지만이 중 특히 이상한 점이 있습니다. 실행될 때 해당 파일 위치로 지정된 명령 프롬프트가 열립니다. 운영 체제에 따라 올바르게 주소 지정 되었기 때문에 코드의 if exist 세그먼트가 작동 중임을 알 수 있습니다.

이 간단한 스크립트가 작동하지 않는 이유는 무엇입니까?

답변

1

시스템이 64 비트 인 경우 두 개의 디렉토리에 모두 존재하는 경우 Expro4.exe이 두 번 실행됩니다. else 문을 포함시켜야합니다.

그러나, 대신 start을 사용하는 당신은 call 사용해야합니다 -

if exist "C:\Program Files (x86)\Expro4\Expro4.exe" (
    Call "C:\Program Files (x86)\Expro4\Expro4.exe" 
) else if exist "C:\Program Files\Expro4\Expro4.exe" (
    Call "C:\Program Files\Expro4\Expro4.exe" 
) 

을 또는 당신은 start /D "path"를 사용할 수 있습니다.

문제는 start의 사용이다 -

C:\>start /? 
Starts a separate window to run a specified program or command. 

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] 
     [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] 
     [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B] 
     [command/program] [parameters] 

    "title"  Title to display in window title bar. 

경로가 새로운 윈도우의 제목으로 설정되고 있으며, 실제로 /D없이 시작하는 모든 스크립트를 지정하지 않는 것입니다.

startcall의 차이는 전자는 별도의 창을 사용하고 후자는 동일한 창을 사용한다는 것입니다. 즉, 통화가 완료 될 때까지 열어 두는 것입니다. 선택은 귀하가 원하는 것을 선택합니다.

+0

저는 귀하의 성명서 작성이 마음에 들고 그 코드는 완벽한 의미를 갖습니다. 이 파일은 두 디렉토리에 존재하지 않지만 입력을 가장 정확하게 사용하고 있습니다. 그러나 나는 여전히 이것을 경험하고 있습니다 : 내 .exe를 시작하는 대신 위치와 함께 제목으로 새로운 명령 프롬프트를 시작합니다. 왜 그랬는지 나는 상실했다. – SuperFungi

+0

예, 방금 실제 문제가 무엇인지 깨달았습니다. 다시 한번 살펴보십시오. – unclemeat

+1

감사합니다. 내 실수는 이것이 가치있는 교훈임을 알 수 있습니다. :) – SuperFungi

0

간단한 더보기 : 경로가 존재

경우 \ 시작 1.EXE/경로 \ 1.EXE

1.EXE가 자동 설치 프로그램입니다

, 또한 오류

를 무시 자세한을 을 사용하여 대기
관련 문제