2010-03-08 20 views
8

To jest prawdopodobnie skryptowanie wsadowe 101, ale nie mogę znaleźć żadnego jasnego wyjaśnienia/dokumentacji, dlaczego tak się dzieje lub jeśli moje obejście jest faktycznie rozwiązaniem. W związku z tym naprawdę doceniamy każdą terminologię lub linki do dobrych źródeł.uruchamianie pliku wykonywalnego z systemu Windows za pomocą skryptu wsadowego, ale nie w plikach programu

Mam program, który chcę wykonać za pomocą skryptu wsadowego (wraz z kilkoma innymi programami). Jest to jedyna pozycja, w której exe nie znajduje się w folderze Program Files. mogę je zacząć tak:

C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe 

Ale pojawia się błąd wzdłuż linii:

Run-time Error '3024': 

Could not find file 
C:\Users\MyUserName\Desktop\ModuleSettings.mdb 

Wydaje się więc, że program szuka jego ustawień pliki z tej samej lokalizacji, uruchamia się skrypt wsadowy. Biorąc pod uwagę, że w końcu wszystko działa w następujący sposób:

cd C:\WeirdProgram\WeirdProgramModule\ 
weirdmodule.exe 

To działa dobrze, a to nie jest koniec świata, aby przejść tę trasę (tylko jeden dodatkowy wiersz), ale mam przekonanie, sobie, że robię coś złego na podstawie braku podstawowego zrozumienia.

Ktoś wie lub może wskazać mi, dlaczego działa w ten sposób?

Aha, wykonując następujące czynności:

start "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe" 

nic nie robi w ogóle.

Dzięki,

Odpowiedz

16

robisz to doskonale :-)

wykonywalny jest prawdopodobnie szuka tego pliku w bieżącej pracy” katalog ", który jest ustawiony, kiedy" cd "do niego wcześniej.

możesz ręcznie ustawić swój katalog roboczy, tworząc skrót do pliku wsadowego; prawy przycisk myszy; nieruchomości.

edit:

można również ustawić bieżący katalog roboczy za pomocą polecenia start:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" 

edit:

Jeśli chcesz przekazać params, wystarczy dodać je do wykonywalnego pliku tak jak w zwykłym skrócie:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" "param1 param2" 

lub

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe param1 param2" 

Dla odniesienia, składnia jest opisana tutaj: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true.

+0

Otrzymujesz premię za odpowiedź za pokazanie mi, jak wykonać w jednej linii. To wszystko, z tego co obaj mówicie, ale moi przełożeni chcieli czegoś mocnego jak bęben. – Anthony

+0

jak mogę przekazać argument do dziwnego modułu? –

+0

Zaktualizuję odpowiedź. –

5

co się dzieje jest to, że weirdmodule.exe szuka w „bieżącym katalogu” dla pliku .mdb. Możesz być w stanie powiedzieć, gdzie znaleźć plik .mdb za pomocą parametru wiersza poleceń lub innej metody konfiguracji (może to być plik rejestru lub .ini). Sposób określania lokalizacji należy jednak wyłącznie do programu weirdmodule.exe.

Oprócz tego, twoje obecne obejście jest prawdopodobnie tym, co utknęło.

Jeśli chodzi o Twój problem z używaniem start.exe ... program start.exe ma bardzo, bardzo dziwne zachowanie (dziwaczne zachowanie, moim zdaniem) traktowania pierwszego parametru jako "tytułu" do umieszczenia w oknie, jeśli (i tylko jeśli) pierwszy parametr jest w cudzysłowach. Masz więc kilka opcji:

  • Nie używaj cytatów do określenia programu. Działa to dla ciebie, bo nie trzeba cytaty (nie ma żadnych spacji ani innych znaków specjalnych w ścieżce, które wymagałyby cytowania IT):

    start C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe 
    
  • dać pusta (lub jakiś inny ciąg) Nazwa jako pierwszy parametr.To jest coś, co trzeba zrobić, jeśli ścieżka wymagane cytaty:

    start "" "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe" 
    
+0

Plik 'mdb' znajduje się tuż obok pliku' exe'. Sądzę, że wyglądałoby to na tej samej ścieżce, z której został wywołany, zanim spojrzy się na ścieżkę, która go nazwała (jeśli ma to jakiś sens). – Anthony

+0

Bieżący katalog będzie prawdopodobnie lokalizacją pliku wsadowego, z którego korzystasz. Dlatego twoje rozwiązanie działa (aktualny katalog został zmieniony na exe). – Russell

+0

@Anthony: masz rację, że szukanie w katalogu aplikacji ma często sens. Jest to powszechna technika - choć uważam, że zazwyczaj najpierw przegląda się katalog bieżący, a następnie katalog aplikacji. Daje to użytkownikom większą elastyczność, jeśli chcą mieć wiele zestawów danych. Niestety, jesteś na łasce tego, kto zakodował program, aby nadać mu elastyczność, jaką powinien mieć. –

Powiązane problemy