ไฟล์ BAT: เปิดหน้าต่างใหม่ cmd และดำเนินการคำสั่งในนั้น


163

ฉันพยายามเปิดหน้าต่างคำสั่งใหม่ในไฟล์ BAT:

start %windir%\system32\cmd.exe

หลังจากเปิดแล้วฉันต้องการรันคำสั่ง BAT ในหน้าต่างใหม่:

echo "test in new window"

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


263

คุณอาจพบคำตอบของคุณแล้วเพราะเมื่อไม่นานมานี้คุณถาม แต่ฉันพยายามทำสิ่งที่คล้ายกันเมื่อเขียนโค้ด ror ฉันต้องการเรียกใช้ "เซิร์ฟเวอร์ rails" ในหน้าต่าง cmd ใหม่ดังนั้นฉันไม่ต้องเปิด cmd ใหม่แล้วหาเส้นทางของฉันอีกครั้ง

สิ่งที่ฉันค้นพบคือการใช้สวิตช์ K เช่นนี้:

start cmd /k echo Hello, World!

เริ่มก่อน "cmd" จะเปิดแอปพลิเคชันในหน้าต่างใหม่และ "/ K" จะดำเนินการ "echo Hello, World!" หลังจาก cmd ใหม่หมด

คุณสามารถใช้สวิตช์ / C เพื่อทำสิ่งที่คล้ายกันได้

start cmd /C pause

ซึ่งจะดำเนินการ "หยุดชั่วคราว" แต่ปิดหน้าต่างเมื่อคำสั่งเสร็จสิ้น ในกรณีนี้หลังจากคุณกดปุ่ม ฉันพบสิ่งนี้มีประโยชน์สำหรับ "เซิร์ฟเวอร์ rails" จากนั้นเมื่อฉันปิดเซิร์ฟเวอร์ dev ของฉันฉันไม่ต้องปิดหน้าต่างหลังจากนั้น


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.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


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 กระบวนการสำหรับการพัฒนาเว็บ มันส่งผลให้มีหน้าต่าง 3 บานเปิดอยู่เนื่องจากพวกเขาจำเป็นต้องทำงานอย่างต่อเนื่อง

Mongo ถูกเพิ่มเข้าสู่เส้นทางของฉันดังนั้นฉันจึงไม่จำเป็นต้องซีดีเหมือนที่ฉันทำกับอีกสองโปรแกรม แน่นอนเส้นทางไปยังไฟล์ของคุณจะแตกต่างกันไป แต่หวังว่าจะช่วยได้

:: 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

ขอบคุณทุกคนที่นี่ใน Stack Overflow; โซลูชันนี้แก้ไขคำถามข้างต้น แต่ถูกขยายเพื่อเรียกใช้งานเหล่านี้โดยอัตโนมัติ:

  1. ฉันต้องการรันเซิร์ฟเวอร์ railsของฉัน
  2. เรียกใช้งาน rake: ผู้ปฏิบัติงานสำหรับ gem ล่าช้าของฉันเช่นกัน
  3. และเปิดเบราว์เซอร์อินเทอร์เน็ตเริ่มต้นเพื่อแสดงหน้าของฉัน
  4. ในที่สุดก็จะออกจากหน้าต่าง cmdเปิดให้บริการสำหรับคำสั่งพิเศษใด ๆ ในช่วงเซสชั่นของฉัน

ฉันคิดว่าโครงการของฉันเรียกว่า"antiquum"

สร้างไฟล์"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 antiquum

รหัสจะเปิดหน้าต่างอีกสอง cmd และเบราว์เซอร์ TIMEOUTหลีกเลี่ยงข้อผิดพลาดในเบราว์เซอร์

ส่วน: เริ่มทำงาน คุณสามารถรันภารกิจ 1,2 หรือ 4 แยกกันโดยพิมพ์ params เป็น: เซิร์ฟเวอร์ , ผู้ปฏิบัติงานหรือไม่มีเพื่อเปิด cmd ไว้ในรูทของโครงการ"antiquum"

สนุก.


2

หากฉันเข้าใจว่าคุณทำสิ่งนี้อย่างถูกต้องในไฟล์ค้างคาวของคุณจะเปิดพร้อมท์คำสั่งและพิมพ์ข้อความของคุณไปที่หน้าจอ

cmd.exe hello world

หวังว่านี่จะช่วยได้


2

การเรียกใช้ไฟล์หลามในหน้าต่าง cmd ใหม่ที่มีช่องว่างในชื่อไฟล์:

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

0

เพิ่ม ระหว่างสองคำสั่งรันคำสั่งทั้ง/k in order

ตัวอย่าง:

cmd /k echo "hello"

คำสั่งนี้จะเปิดก่อนcommand promptจากนั้นจึงเรียกใช้งานecho "hello"คำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.