[英]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 中的所有人; 此解決方案解決了上述問題,但已擴展為自動運行這些任務:
我想我的項目被稱為“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: server 、 worker或 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.