คำสั่งหลายคำสั่งในบรรทัดเดียวในไฟล์แบตช์ของ Windows


111

ใน Unix เราสามารถใส่หลายคำสั่งในบรรทัดเดียวได้ดังนี้:

$ date ; ls -l ; date

ฉันลองสิ่งที่คล้ายกันใน Windows:

 > echo %TIME% ; dir ; echo %TIME

dirแต่มันพิมพ์เวลาและไม่ได้ดำเนินการคำสั่ง

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?


3
อาจซ้ำกันได้ของHow to run two command in one line in Windows CMD?
IvanRF

คำตอบ:


181

ใช้:

echo %time% & dir & echo %time%

นี่คือจากหน่วยความจำเทียบเท่ากับตัวคั่นเซมิโคลอนในbashและเชลล์ UNIXy อื่น ๆ

นอกจากนี้ยังมี&&(หรือ||) ซึ่งรันคำสั่งที่สองหากคำสั่งแรกประสบความสำเร็จ (หรือล้มเหลว) แต่เครื่องหมายแอมเปอร์แซนด์เดียว&คือสิ่งที่คุณกำลังมองหาที่นี่


นั่นเป็นไปได้ว่าจะให้เวลาเดียวกันกับคุณอย่างไรก็ตามเนื่องจากตัวแปรสภาพแวดล้อมมักจะได้รับการประเมินจากการอ่านแทนที่จะดำเนินการ

คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยการเปิดการขยายล่าช้า:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

ที่จำเป็นจากบรรทัดคำสั่ง หากคุณกำลังทำสิ่งนี้ภายในสคริปต์คุณสามารถใช้setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal

ขอบคุณสำหรับคำตอบ. ปัญหาคือใช้งานได้บางส่วน % ครั้งแรกและครั้งสุดท้าย% พิมพ์เวลาเดียวกันแม้ว่าคำสั่ง (ตรงกลาง) จะใช้เวลาอย่างน้อย 40 วินาทีในการดำเนินการให้เสร็จสมบูรณ์ (ฉันรันสคริปต์ของฉันแทนคำสั่ง dir)
Raghuram

1
นั่นเป็นเพราะตัวแปรสภาพแวดล้อมได้รับการประเมินเมื่อมีการอ่านคำสั่งแทนที่จะดำเนินการ ฉันจะอัปเดตคำตอบ
paxdiablo

ยังคงมีปัญหาอยู่ สคริปต์กำลังออกด้วยรหัส 1 แต่ยังคงพิมพ์เสียงสะท้อนครั้งที่สองในเวลาเดียวกันดูนี้ op 12: 57: 56.93 เธรดออกในขณะที่ 3 เธรดกำลังทำงาน 12: 57: 56.93
Raghuram

3
ฉันมักจะใช้time /t(หรือecho.|time) แทนที่จะใช้echo %time%เพื่อหลีกเลี่ยงปัญหานี้
Joey

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