BAT-файл: откройте новое окно cmd и введите туда код

Все

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

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

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

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

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

С уважением

11 ответов

Решение

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

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

start cmd /k echo Hello, World!

начать до того, как "cmd" откроет приложение в новом окне, а "/K" выполнит "echo Hello, World!" после того, как новый cmd вверх.

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

start cmd /C pause

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

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

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

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

Это не очень легко.

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

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

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

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

Я думаю, мой проект называется "Antiquorum".

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

Секция :start работает. Вы можете запускать задачи 1,2 или 4 по отдельности, набирая params как: server, worker или none, чтобы оставить cmd открытым в корне проекта "antiquorum".

Наслаждаться.

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

Пример:

cmd /k echo "hello"

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

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

cmd.exe hello world

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

Запустить файл python в новом окне cmd с пробелами в имени файла:

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

Расширение ответа от @Dan Zuzevich. Ниже приведен компакт-диск «Изменить каталог», если ваш целевой файл находится на другом диске. Например, он должен вызывать файл с диска C и диска D.

      :: Start MongoDB
start cmd.exe /k "mongod"

:: cd app directory, and start it
cd C:\project\dev
C:
start cmd.exe /k "npm run dev"

:: cd to api server, and start that
cd D:\api\server
D:
start cmd.exe /k "npm run dev"

Мне нужно было запустить среду, а затем использовать python в этой среде.

Если моя структура папок:

      C:\environments>
C:\environments\encrypted_stuff>
C:\environments\encrypted_stuff\p1>
C:\environments\encrypted_stuff\p2>

И я хотел активировать среду "encrypted_stuff", а затем вызвать скрипт из p2, я мог бы ввести это в bat, который хранится в C:\environments\p2.bat

      start cmd /k "Scripts\activate && cd p2 && python p2_script.py"

Тогда у меня может быть bat-файл для любого из сценариев, и все они будут использовать мою среду «encrypted_stuff». Теперь я могу щелкнуть файл bat с рабочего стола, и он загрузит мою конкретную среду, а затем запустит скрипт в этой среде.

Я хотел, чтобы мое окно оставалось открытым после того, как я убью или перезапущу Firebase, поэтому я использовал два командных файла.

Файл рабочего стола для быстрого доступа: run_firebase.bat

-------------- НАЧАТЬ СОДЕРЖАНИЕ ФАЙЛА --------------

запустить cmd /k C:\dev\init_firebase_batch.bat

--------------- КОНЕЦ СОДЕРЖИМОГО ФАЙЛА ---------------

Пакетный файл для получения ожидаемых результатов: C:\dev\init_firebase_batch.bat

-------------- НАЧАТЬ СОДЕРЖАНИЕ ФАЙЛА --------------

cd C:\dev\aptr_datasync\aperture-customer-hub эмуляторы firebase: начало

--------------- КОНЕЦ СОДЕРЖИМОГО ФАЙЛА ---------------

Итак ... дважды щелкните run_firebase.bat, и он запустит второй пакет. После выхода Ctrl C из моего процесса окно остается открытым. Кажется тривиальным, но я не люблю отвлекаться, пока работаю над кодом.

Я потратил время на решение только потому, что думал, что это будет просто. Надеюсь, это упростит другим.

Я думаю, это проверяет вопросы в исходном сообщении:[x] Я пытаюсь открыть новое командное окно в файле BAT:[x] После его открытия я хотел бы выполнить команду BAT в новом окне

Другие вопросы по тегам