Plik BAT: Otwórz nowe okno cmd i wykonaj w nim polecenie

163

Próbuję otworzyć nowe okno poleceń w pliku BAT:

start %windir%\system32\cmd.exe

Po otwarciu chciałbym wykonać polecenie BAT w nowym oknie:

echo "test in new window"

W jaki sposób mogę to zrobić?

Tjekkles
źródło

Odpowiedzi:

263

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.

aross
źródło
2
Jeśli używasz tego do uruchamiania serwera rails, w rzeczywistości nie musisz wpisywać cmd. Możesz po prostu wpisać start rails s.
fbonetti
86

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

Shannon Matthews
źródło
13

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.

sorpigal
źródło
11

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"
Dan Zuzevich
źródło
7

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ń:

  1. Chcę uruchomić mój serwer rails
  2. Uruchom pracy natarcia: pracownik mojego delayed_job gem zbyt
  3. i Otwórz domyślną przeglądarkę internetową, aby wyświetlić moją stronę
  4. Wreszcie, aby wyjechać do cmd okno otwarte na żadnych dodatkowych poleceń podczas mojej sesji.

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ę.

Fer Padron
źródło
2

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.

Chris Derry
źródło
2

aby uruchomić plik Pythona w nowym oknie cmd ze spacjami w nazwie pliku:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"
bracoo
źródło
0

Dodanie między dwoma poleceniami powoduje wykonanie obu poleceń ./k in order

Przykład:

cmd /k echo "hello"

to polecenie najpierw otworzy się, command prompta następnie wykona echo "hello"polecenie

Vicky Salunkhe
źródło