簡體   English   中英

BAT文件:打開新的cmd window並在里面執行命令

[英]BAT file: Open new cmd window and execute a command in there

我正在嘗試在 BAT 文件中打開一個新命令 window:

start %windir%\system32\cmd.exe

打開后,我想在新的window中執行一條BAT命令:

echo "test in new window"

我怎樣才能做到這一點?

您可能已經找到了答案,因為這是您在一段時間前提出的問題。 但是我在編碼 ror 時嘗試做類似的事情。 我想在新的 cmd 窗口中運行“rails server”,這樣我就不必打開新的 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 /?查看 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 文件中。 如果例如您需要腳本的其余部分(變量等)的大量狀態,這可能是不切實際的。 一種選擇是將您需要的任何值(例如要操作的目錄)傳遞給批處理文件:

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 個 Web 開發流程的示例腳本。 這導致 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"

感謝 Stack Overflow 中的所有人; 此解決方案解決了上述問題,但已擴展為自動運行這些任務:

  1. 我想運行我的rails 服務器
  2. 也為我的 delay_job gem 運行一個rake jobs:worker
  3. 並打開默認的互聯網瀏覽器以顯示我的頁面
  4. 最后,離開我的會議期間一個cmd窗口中打開任何額外的命令。

我想我的項目被稱為“antiquorum”。

%USERPROFILE%目錄中創建一個“init.bat”文件(打開一個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: serverworker或 none 以在“antiquorum”項目的根目錄中打開 cmd。

享受。

如果我理解您正確執行此操作,您的 bat 文件將打開命令提示符並將您的消息打印到屏幕上。

cmd.exe hello world

希望這可以幫助。

在新的 cmd 窗口中運行一個 python 文件,文件名中有空格:

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

擴展@Dan Zuzevich 的回答。 如果您的目標文件在不同的驅動器上,下面是 CD“Change Directory”。 例如它必須從驅動器 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"

在兩個命令之間添加/k in order執行這兩個命令

例子:

cmd /k echo "hello"

此命令將首先打開command prompt然后執行echo "hello"命令

我希望我的窗口在我殺死或重新啟動 Firebase 后保持打開狀態,所以我使用了兩個批處理文件。

易於訪問的桌面文件: run_firebase.bat

--------------START FILE CONTENTS--------------

start cmd /k C:\dev\init_firebase_batch.bat

---------------END FILE CONTENTS---------------

運行預期結果的批處理文件: C:\\dev\\init_firebase_batch.bat

--------------START FILE CONTENTS--------------

cd C:\dev\aptr_datasync\aperture-customer-hub
firebase emulators:start

---------------END FILE CONTENTS---------------

所以...雙擊run_firebase.bat並運行第二批。 Ctrl + C退出我的進程后,窗口保持打開狀態。 看起來微不足道,但我不喜歡在編寫代碼時分心。

我只是花時間解決,因為我認為這很簡單。 希望這為其他人創造了這種簡單性。

我認為這會檢查初始帖子中的問題:

[x] 我正在嘗試在 BAT 文件中打開一個新的命令窗口
[x] 打開后,我想在新窗口中執行 BAT 命令

我需要運行一個環境,然后在該環境中使用 python。

如果我的文件夾結構是:

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

我想激活“encrypted_stuff”環境,然后從 p2 調用腳本,我可能會在存儲在 C:\environments\p2.bat 中的 bat 中鍵入它

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

然后我可以為任何腳本創建一個 bat 文件,所有腳本都將使用我的“encrypted_stuff”環境。 現在我可以從桌面單擊 bat 文件,它將加載我的特定環境,然后在該環境中運行腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM