2010-11-18 14 views
8

Mam plik wsadowy, który zwykle powoływania tak:jak uruchomić plik wsadowy cmd.exe w sub skorupy

longjob.cmd >result.txt 2>&1 

Działa to dobrze, ale skrypt zmienia katalog, w trakcie jego realizacji pozostawiając moją skorupę w tym katalogu - co jest uciążliwe.

Czy istnieje sposób uruchomienia polecenia w podrzędnej powłoce - przy jednoczesnym zachowaniu możliwości przechwytywania danych wyjściowych?

Próbowałem

cmd longjob.cmd >result.txt 2>&1 

który właśnie siedzi czeka na polecenie wyjścia.

Również próbowałem

start longjob.cmd >result.txt 2>&1 

który ma uruchomić skrypt, ale w nowym oknie i wszystkie dane zostaną wysłane do tego okna zamiast pliku.

+0

Najprostszym sposobem rozwiązania tego problemu jest naprawienie pliku wsadowego. "pushd' /' popd' są tutaj pomocne. Chyba że celem pliku wsadowego jest zmiana katalogu, do którego nigdy nie napisałbym tego, który pozostawi w innym katalogu niż ten, w którym zaczął. – Joey

+0

Co na przykład anulowanie pliku wsadowego za pomocą^C. Czy istnieje jakiś rozsądny sposób przywrócenia oryginalnego katalogu roboczego mimo anulowania pliku wsadowego? – bambams

Odpowiedz

12

Spróbuj

CMD /C longjob.cmd >result.txt 2>&1 

Nie wiem, jak to będzie radzić sobie z przekierowaniem, ale CMD/C pozwala powiedzieć CMD co biegać i że powinien wyjść po zakończeniu. (CMD/K pozwala powiedzieć, żeby coś uruchomił, ale pozostanie w pobliżu po zakończeniu.) Ponownie użyje istniejącego okna konsoli, jeśli zostanie uruchomione w jednym.

+0

"cmd/c" wydaje się działać. Wielkie dzięki. – Martin

+0

Dokładnie przeciwnie, Leo: '/ c' istnieje po uruchomieniu polecenia,'/k' da ci podpowiedź później. – Joey

+0

Tak, mam C i K na złe. Edytowane w celu poprawienia. –

0

Polecenie może być tym, czego potrzebujesz.

tj

call longjob.cmd >result.txt 2>&1 
+1

jeśli longjob.cmd wywołuje chdir, powłoka wywołująca pozostaje w tym katalogu, gdy skrypt kończy się, gdy jest używany z wywołaniem. – Martin

+0

Wywołanie nie wydaje się uruchomić skrypt w oddzielnym procesie (sub-shell). Po prostu wykonuje skrypt w bieżącym procesie, pozostawiając efekty uboczne (zmiany katalogów, modyfikację zmiennych środowiskowych itp.) Z wykonania. – Nathan

Powiązane problemy