2010-09-29 16 views
5

Mam problem z wywołaniem pliku wsadowego z innego pliku wsadowego podczas próby uruchomienia wszystkiego przy użyciu Process.Start. Zasadniczo nazywam wykonanie pliku wsadowego z mojego C# program, który wygląda tak:Dołącz plik wsadowy do pliku wsadowego


call include.bat 

//execute the rest of the batch file here 

Plik include.bat konfiguruje ścieżki i może być używany przez wiele innych plików wsadowych. Kiedy uruchamiam Process.Start czasami to działa i czasami dostaję ERROR: cannot find include.bat. Przede wszystkim jakikolwiek pomysł, dlaczego tak się dzieje? I pomysły, jak to naprawić z pliku wsadowego?

Odpowiedz

7

Aby przejść do katalogu plik wsadowy znajduje się użyć tego:

cd %~dp0 

zrobić to w prawie wszystkich moich skryptach wsadowych. W ten sposób ścieżki względne powinny zawsze działać.

+0

dzięki za to – Dimitris

+0

Możesz oznaczyć go jako odpowiedź, jeśli rozwiązał problem. :) – Botz3000

+1

Zazwyczaj ustawię var, aby skrypt był bardziej czytelny dla człowieka: SET CDIR =% ~ dp0 – djangofan

1

Pierwszą rzeczą, którą chciałbym spróbować, jest użycie pełnej informacji o ścieżce w instrukcji call dla include.bat. Jeśli to naprawi, prawdopodobnie po prostu nie uruchomisz pliku wsadowego z właściwej lokalizacji. Jestem pewien, że w języku C# istnieje "katalog roboczy", po prostu nie jestem pewien co to jest.

1

Czy ustawiasz parametr ProcessStartInfo.WorkingDirectory (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx) w ProcessStartInfo, który przekazujesz do Process.Start?

Ponieważ czasami nie można znaleźć pliku include.bat, katalog roboczy może być nieprawidłowy (nie folder, w którym znajduje się plik include.bat).

+0

Muszę przyznać, że tego nie robię. Czy istnieje jakiś sposób, aby to naprawić przynajmniej tymczasowo z pliku wsadowego? – Dimitris

+0

Użyj cd% ~ dp0, jak podano powyżej w Botz3000. –

+0

dziękuję za to – Dimitris

2

Przed skryptu, spróbuj CD /D %~dp0

+1

Twoje prawo być może. Dysk CD może nie działać, jeśli oznacza przełączenie na inną literę dysku, ale z przełącznikiem/D, być może. Nie próbowałem tego, ale jest to dobra myśl ... – djangofan

2

wiem, że to jest stare pytanie, ale myślałem, że byłoby warto zauważyć, że podejście promowane przez zaakceptowanej odpowiedzi (tzn zmienia katalog roboczy) może nie zawsze być właściwe.

Lepszym ogóle podejście odnosi się do zależności od pełnej ścieżki:

call "%~dp0include.bat" 

(Ponieważ% ~ dp0 już kończy backslashem, nie trzeba dodać jeszcze jeden).

Oto niektóre zalety nie zmieniające katalog roboczy:

  1. Reszta pliku wsadowego może nadal korzystać z oryginalnego katalogu roboczego.
  2. Oryginalny katalog roboczy w wierszu polecenia zostaje zachowany, nawet bez "SETLOCAL".
  3. Jeśli pierwszy plik wsadowy zostanie uruchomiony przez ścieżkę UNC (na przykład "\\ serwer \ udział \ plik.bat"), wywołanie pełnej ścieżki zakończy się pomyślnie, gdy changing the directory (even with "cd /d") will fail. (Korzystanie pushd/popd będzie obsługiwać ten punkt, ale mają swój własny zestaw problemów.)

Korzyści te są szczególnie ważne dla plików wsadowych alias typu, nawet jeśli nie są one tak ważne dla konkretnej sytuacji, zmotywowało to pytanie.

Powiązane problemy