Odpowiedzi:
Być może już znalazłeś odpowiedź, ponieważ pytałeś o nią jakiś czas temu. Ale próbowałem zrobić coś podobnego podczas kodowania ror. Chciałem uruchomić „serwer railsowy” w nowym oknie cmd, więc nie muszę otwierać nowego cmd i ponownie znajdować ścieżki.
Dowiedziałem się, że używam przełącznika K w następujący sposób:
start cmd /k echo Hello, World!
start zanim "cmd" otworzy aplikację w nowym oknie, a "/ K" uruchomi "echo Hello, World!" po uruchomieniu nowego polecenia cmd.
Możesz również użyć przełącznika / C do czegoś podobnego.
start cmd /C pause
Spowoduje to wykonanie „pauzy”, ale zamknie okno po wykonaniu polecenia. W tym przypadku po naciśnięciu przycisku. Znalazłem to przydatne dla "serwera railsowego", wtedy kiedy zamykam mój serwer deweloperski, nie muszę potem zamykać okna.
Użyj następujących w pliku wsadowym:
start cmd.exe /k "more-batch-commands-here"
lub
start cmd.exe /c "more-batch-commands-here"
/ c Wykonuje polecenie określone przez łańcuch, a następnie kończy działanie
/ k Wykonuje polecenie określone przez łańcuch, ale pozostaje
Więcej informacji można znaleźć w dokumentacji cmd.exe przy użyciu cmd /?
.
Właściwe formatowanie ciągu poleceń staje się nieco bardziej skomplikowane w przypadku spacji w argumentach. Zobacz przykłady poniżej. Zwróć uwagę na użycie zagnieżdżonych podwójnych cudzysłowów w niektórych przykładach.
Przykłady:
Uruchom program i podaj parametr nazwy pliku:
CMD /c write.exe c:\docs\sample.txt
Uruchom program i podaj długą nazwę pliku:
CMD /c write.exe "c:\sample documents\sample.txt"
Spacje w ścieżce programu:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
Spacje w ścieżce programu + parametry:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""
Uruchom demo1 i demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
Źródło: http://ss64.com/nt/cmd.html
To nie jest łatwe.
Najlepszym podejściem jest umieszczenie w „nowym oknie” tej części skryptu, która ma być wykonana, w osobnym pliku .bat. Może to być niepraktyczne, jeśli np. Potrzebujesz dużej ilości stanów z reszty skryptu (zmienne itp.). Jedną z opcji jest przekazanie potrzebnych wartości (np. Dir do operacji) do pliku wsadowego:
start cmd.exe stuff.bat %this_dir%
Jeśli masz dużą liczbę stanów do przesłania, możesz rozważyć wygenerowanie pliku wsadowego w czasie wykonywania:
set foo=Hello, World
set list_me=%userprofile%
set tmpdir=c:\windows\temp
set tmp=%tmpdir%\tmp.foo
del /q /f "%tmp%"
echo.echo %foo%>>"%tmp%"
echo.dir "%list_me%">>>"%tmp"
start cmd.exe "%tmp%"
del /q /f "%tmp%"
Oczywiście jest to trywialny przykład.
Pomogły mi powyższe odpowiedzi. Ale nadal wymagało trochę zrozumienia. Oto przykładowy skrypt, którego używam do uruchomienia 3 procesów tworzenia stron internetowych. Powoduje to, że 3 okna pozostają otwarte, ponieważ muszą działać nieprzerwanie.
Mongo jest globalnie dodawane do mojej ścieżki, więc nie potrzebuję CD, tak jak robię to w przypadku pozostałych dwóch programów. Oczywiście ścieżka do twoich plików będzie się różnić, ale miejmy nadzieję, że to pomoże.
:: Start MongoDB
start cmd.exe /k "mongod"
:: cd app directory, and start it
cd my-app
start cmd.exe /k "npm run dev"
:: cd to api server, and start that
cd ../my-app-api
start cmd.exe /k "npm run dev"
Podziękowania dla wszystkich tutaj w Stack Overflow; to rozwiązanie rozwiązuje powyższe pytanie, ale zostało rozszerzone o automatyczne uruchamianie następujących zadań:
Myślę, że mój projekt nazywa się „antykworum”.
Utwórz plik „init.bat” w katalogu % USERPROFILE% (otwórz okno cmd i spójrz na ścieżkę po lewej stronie kursora, aby dowiedzieć się, czym jest% USERPROFILE%)
@echo off
cd C:/projects/rails3/antiquorum
if "%1" == "antiquorum" GOTO start
if "%1" == "worker" GOTO worker
if "%1" == "server" GOTO server
if "%1" == "" GOTO end
:start
start cmd /k %USERPROFILE%\init.bat worker
start cmd /k %USERPROFILE%\init.bat server
TIMEOUT 30
start "" "http://localhost:3000/"
GOTO end
:server
rails s
GOTO end
:worker
rake jobs:work
:end
W nowym oknie linii poleceń wpisz: C:> init antiquorum
Kod otwiera dwa kolejne okna cmd i przeglądarkę. TIMEOUT pozwala uniknąć błędów w przeglądarce.
Sekcja : start wykonuje całą pracę. Możesz uruchamiać zadania 1, 2 lub 4 osobno, wpisując parametry takie jak: server , worker lub none, aby pozostawić polecenie cmd otwarte w katalogu głównym projektu "antiquorum" .
Cieszyć się.
Jeśli rozumiem, że robisz to poprawnie, plik bat otworzy wiersz polecenia i wydrukuje wiadomość na ekranie.
cmd.exe hello world
mam nadzieję że to pomoże.
Dodanie między dwoma poleceniami powoduje wykonanie obu poleceń ./k
in order
Przykład:
cmd /k echo "hello"
to polecenie najpierw otworzy się, command prompt
a następnie wykona echo "hello"
polecenie
cmd
. Możesz po prostu wpisaćstart rails s
.