BAT-файл: откройте новое окно cmd и введите туда код - PullRequest
133 голосов
/ 22 февраля 2012

Я пытаюсь работать с файлом .BAT, это должен быть очень простой скрипт, но я не знаю, как это сделать (я не знаком с ним).

ЧтоЯ пытаюсь сделать, это открыть новое командное окно: start% windir% \ system32 \ cmd.exe

И там должен появиться код, который я набираю (например, для печати): echo"test in new window"

Как я могу это сделать?

Так что мне нужно сделать кодирование в командном окне NEW.Может ли кто-нибудь помочь мне в этом?

Ответы [ 8 ]

222 голосов
/ 09 июля 2012

Возможно, вы уже нашли свой ответ, потому что это было некоторое время назад, вы спросили.Но я пытался сделать нечто подобное при кодировании ROR.Я хотел запустить «сервер rails» в новом окне cmd, чтобы мне не нужно было открывать новый cmd, а затем снова находить свой путь.

Я обнаружил, что использовал переключатель K следующим образом:

start cmd /k echo Hello, World!

запускается до того, как «cmd» откроет приложение в новом окне, а «/ K» выполнит «echo Hello, World!»после того, как новый cmd активен.

Вы также можете использовать ключ / C для чего-то похожего.

start cmd /C pause

Это тогда выполнит «паузу», но закроет окно, когда команда будет выполнена.,В этом случае после нажатия кнопки.Я нашел это полезным для "сервера rails", тогда, когда я выключаю свой сервер dev, мне не нужно закрывать окно после.

70 голосов
/ 10 февраля 2015

Используйте следующее в вашем командном файле:

start cmd.exe /k "more-batch-commands-here"

или

start cmd.exe /c "more-batch-commands-here"

/ c Выполняет команду указывается строкой, а затем завершается
/ k Выполняет команда, указанная в строке, но остается

Обратитесь к документации cmd.exe, используя cmd /? для получения более подробной информации.

Правильное форматирование командной строки становится немного сложнее с пробелами в аргументах. Смотрите примеры ниже. Обратите внимание на использование вложенных двойных кавычек в некоторых примерах.

Примеры:

Запустите программу и передайте параметр имени файла:
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

11 голосов
/ 22 февраля 2012

Это не очень просто.

Наилучший подход состоит в том, чтобы часть вашего скрипта, которую вы хотите выполнить в «новом окне», находилась в отдельном .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%"

Очевидно, что это тривиальный пример.

6 голосов
/ 06 июля 2017

Ответы выше помогли мне.Но все же потребовалось некоторое выяснение.Вот пример сценария, который я использую для запуска 3 процессов веб-разработки.Это приводит к тому, что 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"
5 голосов
/ 08 сентября 2013

Спасибо всем здесь, в переполнении стека;Это решение решает вышеуказанный вопрос, но расширяется для автоматического запуска следующих задач:

  1. Я хочу запустить мой сервер rails
  2. Запуск рейковых заданий: worker для моего гема delayed_job
  3. и откройте интернет-браузер по умолчанию, чтобы показать мою страницу
  4. наконец, чтобы оставить a cmd окно открыто для любых дополнительных команд во время моего сеанса.

Я предполагаю, что мой проект называется "antiquorum."

Создайте * 1027Файл * "init.bat" в каталоге % USERPROFILE% (откройте окно cmd и посмотрите на путь слева от курсора, чтобы узнать, какой%USERPROFILE% is)

@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 позволяет избежать ошибок в браузере.

Раздел : start работает.Вы можете запускать задачи 1, 2 или 4 отдельно, набирая параметры следующим образом: сервер , работник или ни один, чтобы оставить cmd открытым в root из Проект "Antiquorum" .

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

2 голосов
/ 22 февраля 2012

Если я правильно понимаю, что вы делаете это в стороне, ваш файл bat откроет командную строку и выведет ваше сообщение на экран.

cmd.exe hello world

надеюсь, это поможет.

1 голос
/ 19 февраля 2019

для запуска файла Python в новом окне cmd с пробелами в имени файла:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"
0 голосов
/ 24 июня 2019

Добавление /k между двумя командами выполняет обе команды in order.

Пример:

cmd /k echo "hello"

эта команда сначала откроет command prompt, затем выполнит echo "hello" команду

...