2008-10-13 19 views
127

Próbuję napisać skrypt Windows cmd, aby wykonać kilka zadań w serii. Jednak zawsze kończy się po pierwszym poleceniu w skrypcie.Wykonywanie wielu poleceń ze skryptu cmd Windows

Polecenie, które przestaje być po maven (nie jest pewne, czy jest to istotne).

Jak mogę go wykonać i uruchomić każde zadanie z kolei?

Zainstalowanie jakiegokolwiek oprogramowania lub konfigurowanie rejestru itp. Jest całkowicie wykluczone - musi się obawiać waniliowej instalacji systemu Windows XP.

Idealnie chciałbym, aby skrypt został przerwany, jeśli któreś z poleceń nie powiodło się, ale jest to "miło mieć", nie jest konieczne.

Dzięki.

Odpowiedz

132

Po wywołaniu innego pliku .bat, myślę, że trzeba „call” na początku rozmowy:

call otherCommand.bat 
+1

Witam, w oryginalnym skrypcie nie wywoływałam innych plików .cmd, ale od tego czasu podzieliłem go na osobne pliki, dzięki czemu mogłem uruchamiać je po kolei. Tak więc, wykonanie połączenia przed każdym poleceniem, wydaje się, że udało się, dzięki! –

+0

To również zadziałało dla mnie, wywołując polecenie git diff – Bronumski

+5

W systemie Windows 'mvn' jest sam w sobie plikiem .bat, więc musisz użyć' call' do niego, jak w 'call mvn install' ; zwykle nie trzeba tworzyć dodatkowego pliku cmd. – jfpoilpret

1

nie wiem bezpośredniej odpowiedzi na pytanie, ale jeśli dużo zrobić z tych skryptów, warto nauczyć się bardziej wydajnego języka, takiego jak perl. Istnieją bezpłatne implementacje dla systemu Windows (na przykład activestate, cygwin). Stwierdziłem, że jest to warte początkowego wysiłku dla moich własnych zadań.

Edit:

Jak sugeruje @Ferruccio, jeśli nie można zainstalować dodatkowe oprogramowanie, należy rozważyć VBScript i/lub JavaScript. Są wbudowane w host skryptów systemu Windows.

+0

Dzięki, ale nie mogę zainstalować żadnego oprogramowania. Chciałbym mieć dostęp do czegoś potężniejszego niż brzydki język skryptowy Windows. :-( –

+6

Zawsze możesz użyć vbscript lub javascript, które są wbudowane w host skryptów Windows – Ferruccio

43

Możesz użyć symbolu & & między poleceniami, aby wykonać drugie polecenie tylko wtedy, gdy pierwsze powiedzie się. Więcej informacji tutaj: http://commandwindows.com/command1.htm

+0

Dzięki, spróbuję w połączeniu z zaakceptowaną odpowiedzią powyżej –

+0

Czy to powstrzyma wykonywanie drugiego skryptu jeśli budowanie maven nie powiedzie się? –

+0

To połączenie jest zepsute: "Serwer zaplecza nie odpowiedział na czas Serwer aplikacji jest zbyt zajęty i nie może obsłużyć żądań w odpowiednim czasie." – mc10

25

Nie wiem, dlaczego pierwsze polecenie się zatrzymuje. Jeśli można je równolegle, można spróbować czegoś podobnego

start cmd.exe /C 1.bat  
start cmd.exe /C 2.bat 
+6

Użyj '/ K' zamiast'/C', jeśli chcesz, aby powłoka pozostała otwarta po wykonaniu polecenia. – JellicleCat

+0

Nie trzeba używać 'cmd.exe' i' start', wystarczy 'start x.bat1'. – user66001

1

Jeśli używasz systemu Windows można użyć następującego polecenia.

Napęd:

cd "Script location" 
schtasks /run /tn "TASK1" 
schtasks /run /tn "TASK2" 
schtasks /run /tn "TASK3" 
exit 
19

właśnie robi dokładnie to samo (ish) zadanie stworzenia skryptu wsadowego uruchomić Maven skryptów testowych. Problem polega na tym, że wywoływanie skryptów mven z instalacją clean mvn ... samo w sobie jest skryptem i dlatego musi być zrobione z instalacją mvn clean install.

kod, który będzie działał

rem run a maven clean install 
cd C:\rbe-ui-test-suite 
call mvn clean install 
rem now run through all the test scripts 
call mvn clean install -Prun-integration-tests -Dpattern=tc-login 
call mvn clean install -Prun-integration-tests -Dpattern=login-1 

Uwaga raczej wykorzystaniu połączenia. Umożliwi to użycie kolejnych skryptów maven w pliku wsadowym.

0

Należy pamiętać, że nie trzeba średników w plikach wsadowych. Powodem, dla którego musisz skorzystać z połączenia, jest to, że sam mvn jest plikiem wsadowym, a pliki wsadowe muszą nawiązywać połączenia z innymi, w przeciwnym razie sterowanie nie wróci do rozmówcy.

2

Korzystanie podwójne ampersandy uruchomi drugie polecenie tylko wtedy, gdy pierwsza powiedzie:

cd Desktop/project-directory && atom . 

Gdzie, przy wykorzystaniu tylko jednego znaku handlowego będzie próbował uruchomić oba polecenia, nawet jeśli pierwszy zawiedzie:

cd Desktop/project-directory & atom . 
Powiązane problemy