Відповіді:
Ви вже можете знайти свою відповідь, тому що це було певний час тому, що ви запитали. Але я намагався зробити щось подібне при кодуванні ror. Я хотів запустити "сервер рейлів" у новому вікні cmd, тому мені не потрібно відкривати новий cmd і знову знаходити шлях.
Що я з'ясував, це використовувати перемикач K таким чином:
start cmd /k echo Hello, World!
почніть перед тим, як "cmd" відкриє додаток у новому вікні, а "/ K" виконає "echo Hello, World!" після збільшення нового cmd.
Ви також можете використовувати перемикач / C для чогось подібного.
start cmd /C pause
Потім це виконає "паузу", але закриє вікно, коли команда виконана. У цьому випадку після натискання кнопки. Я вважаю це корисним для "сервера рейлів", то коли я закриваю свій сервер розробки, мені не потрібно закривати вікно після.
Використовуйте наступне у своєму пакетному файлі:
start cmd.exe /k "more-batch-commands-here"
або
start cmd.exe /c "more-batch-commands-here"
/ c Виконує команду, задану рядком, а потім завершує
/ k Виконує команду, задану рядком, але залишається
cmd /?
Для отримання детальної інформації ознайомтеся з документацією cmd.exe .
Належне форматування командного рядка стає дещо складнішим з пробілами в аргументах. Дивіться приклади нижче. Зверніть увагу на використання вкладених подвійних лапок у деяких прикладах.
Приклади:
Запустіть програму та передайте параметр імені файлу:
CMD /c write.exe c:\docs\sample.txt
Запустіть програму та передайте довге ім'я файлу:
CMD /c write.exe "c:\sample documents\sample.txt"
Пробіли в програмному шляху:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
Проміжки в програмному шляху + параметри:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""
Запустіть demo1 та demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
Джерело: http://ss64.com/nt/cmd.html
Це не дуже просто.
Найкращим підходом є те, щоб частина вашого сценарію, яку ви хочете виконати у "новому вікні", знаходилася в окремому файлі .bat. Це може бути недоцільно, якщо, наприклад, вам потрібно багато стану з решти сценарію (змінні тощо). Один із варіантів - передати будь-які необхідні вам значення (наприклад, dir для роботи) у пакетний файл:
start cmd.exe stuff.bat %this_dir%
Якщо у вас є велика кількість стану для передачі, ви можете розглянути можливість створення пакетного файлу під час виконання:
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%"
Очевидно, це тривіальний приклад.
Наведені відповіді мені допомогли. Але все-таки потрібно було розібратися. Ось приклад сценарію, який я використовую для запуску 3 процесів для веб-розробки. Це призводить до того, що три вікна залишаються відкритими, оскільки вони повинні працювати постійно.
Mongo глобально додається до мого шляху, тому мені не потрібно CD, як я роблю для інших двох програм. Звичайно шлях до ваших файлів буде різним, але, сподіваємось, це допоможе.
:: 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"
Дякуємо всім, що перебувають у стеку Overflow; це рішення вирішує вищезазначене питання, але розширюється для автоматичного виконання цих завдань:
Я здогадуюсь, мій проект називається "антиквар".
Створіть файл "init.bat" у каталозі % USERPROFILE% (відкрийте вікно cmd і подивіться на шлях зліва від курсору, щоб дізнатися, що таке% 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
У новому вікні командного рядка введіть: C:> init antiquorum
Код відкриває ще два cmd вікна та браузер. TIMEOUT дозволяє уникнути помилок у веб-переглядачі.
Розділ : старт виконує свою роботу. Ви можете запускати завдання 1,2 або 4 окремо, ввівши параметри як: сервер , працівник або жоден, щоб залишити cmd відкритим у корені проекту "antiquorum" .
Насолоджуйтесь.
Якщо я зрозумів, що ви правильно це робите збоку, ваш файл bat відкриє командний рядок і надрукує ваше повідомлення на екран.
cmd.exe hello world
сподіваюся, що це допомагає.
Додавання між двома командами виконує обидві команди ./k
in order
Приклад:
cmd /k echo "hello"
ця команда спочатку відкриється, command prompt
а потім виконає echo "hello"
команду
cmd
. Ви можете просто ввестиstart rails s
.