Файл BAT: відкрийте нове вікно cmd та виконайте команду


163

Я намагаюся відкрити нове вікно команди у файлі BAT:

start %windir%\system32\cmd.exe

Після його відкриття я хочу виконати команду BAT у новому вікні:

echo "test in new window"

Як я можу це зробити?

Відповіді:


263

Ви вже можете знайти свою відповідь, тому що це було певний час тому, що ви запитали. Але я намагався зробити щось подібне при кодуванні ror. Я хотів запустити "сервер рейлів" у новому вікні cmd, тому мені не потрібно відкривати новий cmd і знову знаходити шлях.

Що я з'ясував, це використовувати перемикач K таким чином:

start cmd /k echo Hello, World!

почніть перед тим, як "cmd" відкриє додаток у новому вікні, а "/ K" виконає "echo Hello, World!" після збільшення нового cmd.

Ви також можете використовувати перемикач / C для чогось подібного.

start cmd /C pause

Потім це виконає "паузу", але закриє вікно, коли команда виконана. У цьому випадку після натискання кнопки. Я вважаю це корисним для "сервера рейлів", то коли я закриваю свій сервер розробки, мені не потрібно закривати вікно після.


2
Якщо ви використовуєте це для запуску рельсового сервера, вам фактично не потрібно вводити текст cmd. Ви можете просто ввести start rails s.
fbonetti

86

Використовуйте наступне у своєму пакетному файлі:

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


13

Це не дуже просто.

Найкращим підходом є те, щоб частина вашого сценарію, яку ви хочете виконати у "новому вікні", знаходилася в окремому файлі .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%"

Очевидно, це тривіальний приклад.


11

Наведені відповіді мені допомогли. Але все-таки потрібно було розібратися. Ось приклад сценарію, який я використовую для запуску 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"

7

Дякуємо всім, що перебувають у стеку Overflow; це рішення вирішує вищезазначене питання, але розширюється для автоматичного виконання цих завдань:

  1. Я хочу запустити мій сервер рейлів
  2. Виконайте роботу з граблями: працівник і для моєї дорогоцінної дорогоцінної картки
  3. та Відкрити Інтернет-браузер за замовчуванням, щоб показати мою сторінку
  4. нарешті, залишити в CMD вікно відкрито для будь - яких додаткових команд під час моєї сесії.

Я здогадуюсь, мій проект називається "антиквар".

Створіть файл "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" .

Насолоджуйтесь.


2

Якщо я зрозумів, що ви правильно це робите збоку, ваш файл bat відкриє командний рядок і надрукує ваше повідомлення на екран.

cmd.exe hello world

сподіваюся, що це допомагає.


2

запустити файл python у новому вікні cmd із пробілами у назві файлу:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"

0

Додавання між двома командами виконує обидві команди ./k in order

Приклад:

cmd /k echo "hello"

ця команда спочатку відкриється, command promptа потім виконає echo "hello"команду

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.