การเรียกใช้งานหลายคำสั่งจากสคริปต์ Windows cmd


136

ฉันพยายามเขียนสคริปต์ Windows cmd เพื่อทำงานหลายอย่างในชุดข้อมูล อย่างไรก็ตามมันจะหยุดหลังจากคำสั่งแรกในสคริปต์

คำสั่งที่จะหยุดหลังจากนั้นจะเป็นการสร้าง maven (ไม่แน่ใจว่าเกี่ยวข้องหรือไม่)

ฉันจะทำให้มันดำเนินต่อไปและทำงานแต่ละงานตามลำดับได้อย่างไร

การติดตั้งซอฟต์แวร์ใด ๆ หรือการกำหนดค่ารีจิสตรี ฯลฯ นั้นหมดไปจากคำถาม - มันต้องทำงานกับการติดตั้งวานิลลาของ Windows XP ฉันกลัว

เป็นการดีที่ฉันต้องการให้สคริปต์ยกเลิกหากคำสั่งใด ๆ ล้มเหลว แต่นั่นเป็น "ดีที่มี" ไม่จำเป็น

ขอบคุณ

คำตอบ:


139

เมื่อคุณเรียกไฟล์. bat อื่นฉันคิดว่าคุณต้อง "เรียก" หน้าการโทร:

call otherCommand.bat

1
สวัสดีในสคริปต์ต้นฉบับฉันไม่ได้เรียกไฟล์. cmd อื่น ๆ แต่ฉันแยกมันเป็นไฟล์แยกต่างหากดังนั้นฉันจึงสามารถเรียกใช้แต่ละไฟล์ได้ ดังนั้นการโทรไปที่หน้าคำสั่งแต่ละคำสั่งนั้นดูเหมือนจะทำไปแล้วขอบคุณ!
Darren Greaves

5
ตามความเป็นจริงแล้วบน Windows mvnนั้นเป็นไฟล์. bat ด้วยตัวเองดังนั้นคุณจำเป็นต้องใช้callมันอย่างเช่นในcall mvn install; โดยปกติคุณไม่จำเป็นต้องสร้างไฟล์ cmd พิเศษ
jfpoilpret

2
โปรดทราบว่าคุณไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคในไฟล์แบตช์ และสาเหตุที่คุณต้องใช้การโทรคือ mvn นั้นเองคือไฟล์แบตช์และไฟล์แบตช์ต้องโทรหากันด้วยการโทรมิฉะนั้นการควบคุมจะไม่กลับไปที่ผู้โทร
Pushkar

@Gulzar Nazim - คุณรู้หรือไม่ว่าฉันสามารถใส่คำสั่งทั้งหมดในแบทช์ไฟล์เดียวด้วยคำสั่ง if-else เพราะฉันไม่ต้องการที่จะเก็บมันไว้ในแบทช์ไฟล์ที่แตกต่างกัน?
Ng2-Fun

1
ฉันพยายามทำสิ่งที่คล้ายกับnpmอัพเดตและprotractorการทดสอบ ฉันไม่คิดว่าคำตอบนี้จะใช้กับฉันจนกว่าฉันจะรับรู้npmและprotractorเป็น.cmdไฟล์ใน Windows
joshden

45

คุณสามารถใช้สัญลักษณ์ && ระหว่างคำสั่งเพื่อดำเนินการคำสั่งที่สองก็ต่อเมื่อคำสั่งแรกสำเร็จ ข้อมูลเพิ่มเติมที่นี่http://commandwindows.com/command1.htm


ขอบคุณฉันจะลองใช้ร่วมกับคำตอบที่ได้รับการยอมรับข้างต้น
Darren Greaves

สิ่งนี้จะหยุดการทำงานของสคริปต์ที่สองหรือไม่ถ้าการสร้าง maven ล้มเหลว
Varun Achar

ลิงก์นั้นใช้งานไม่ได้: "เซิร์ฟเวอร์แบ็คเอนด์ไม่ตอบสนองในเวลาเซิร์ฟเวอร์แอปไม่ว่างและไม่สามารถจัดการการร้องขอได้ทันเวลา"
kevinji

1
@TheM Windows แยกความแตกต่างระหว่างแอพพลิเคชั่นแบบอิง GUI และคำสั่ง (มีการตั้งค่าสถานะใกล้กับจุดเริ่มต้นของไฟล์ EXE) หากคุณเริ่มแอปพลิเคชันที่ใช้ GUI จากบรรทัดคำสั่งมันจะปรากฏขึ้นเพื่อสิ้นสุดในทันทีเนื่องจากจะถูกแยกออกจากบรรทัดคำสั่งอย่างสมบูรณ์ หากคุณเริ่มโปรแกรมตามคำสั่งจากโปรแกรม GUI (เช่น Explorer) จะแสดงบรรทัดคำสั่งใหม่เสมอ ระบบ POSIX ไม่แยกความแตกต่างดังกล่าวดังนั้นพฤติกรรมจึงสอดคล้องกันมากขึ้น
coderforlife

2
@TheM เพื่อให้ได้รอบนี้คุณสามารถใช้start /B /WAIT calc
coderforlife

25

ไม่แน่ใจว่าทำไมคำสั่งแรกหยุด หากคุณทำให้มันขนานกันคุณสามารถลองได้

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
ใช้/Kแทน/Cหากคุณต้องการให้เชลล์ยังคงเปิดอยู่หลังจากคำสั่งของคุณทำงาน
JellicleCat

ไม่จำเป็นต้องใช้cmd.exeและstartเพียงแค่start x.bat1จะทำ
user66001

23

ฉันเพิ่งได้ทำหน้าที่เดียวกัน (ish) ที่เหมือนกันในการสร้างชุดสคริปต์เพื่อเรียกใช้สคริปต์ทดสอบ maven ปัญหาคือการเรียก maven scrips ด้วยการติดตั้ง mvn clean ... เป็นตัวสคริปต์และต้องดำเนินการกับการเรียก mvn clean install

รหัสที่จะใช้งานได้

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

หมายเหตุให้ใช้การโทรแทน สิ่งนี้จะอนุญาตให้ใช้สคริปต์ maven ต่อเนื่องในแบตช์ไฟล์


5

การใช้แอมป์แซนด์คู่จะรันคำสั่งที่สองเฉพาะในกรณีที่คำสั่งแรกประสบความสำเร็จ:

cd Desktop/project-directory && atom .

โดยที่ใช้เครื่องหมายแอมเปอร์แซนด์เพียงอันเดียวจะพยายามรันทั้งสองคำสั่งแม้ว่าคำสั่งแรกจะล้มเหลว:

cd Desktop/project-directory & atom .

1

หากคุณใช้ Windows คุณสามารถใช้คำสั่งต่อไปนี้

ไดรฟ์:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

ฉันไม่ทราบคำตอบสำหรับคำถามของคุณโดยตรง แต่ถ้าคุณทำสคริปต์เหล่านี้จำนวนมากมันอาจคุ้มค่าที่จะเรียนรู้ภาษาที่ทรงพลังกว่าอย่าง Perl มีการใช้งานฟรีสำหรับ Windows (เช่น activestate, cygwin) ฉันพบว่ามันคุ้มค่ากับความพยายามครั้งแรกสำหรับงานของฉัน

แก้ไข:

ตามที่แนะนำโดย @Ferruccio หากคุณไม่สามารถติดตั้งซอฟต์แวร์เพิ่มเติมให้พิจารณา vbscript และ / หรือ javascript พวกมันถูกสร้างขึ้นในโฮสต์การสคริปต์ของ Windows


ขอบคุณ แต่ฉันไม่สามารถติดตั้งซอฟต์แวร์ใด ๆ ฉันหวังว่าฉันจะสามารถเข้าถึงสิ่งที่มีประสิทธิภาพมากกว่าภาษาสคริปต์ Windows ที่เส็งเคร็ง :-(
Darren Greaves

6
คุณสามารถใช้ vbscript หรือ javascript ได้ตลอดเวลา พวกมันถูกสร้างขึ้นในโฮสต์การสคริปต์ของ Windows
Ferruccio

0

โปรดทราบว่าคุณไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคในไฟล์แบตช์ และสาเหตุที่คุณต้องใช้การโทรคือ mvn นั้นเองคือไฟล์แบตช์และไฟล์แบตช์ต้องโทรหากันด้วยการโทรมิฉะนั้นการควบคุมจะไม่กลับไปที่ผู้โทร

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