start "" "C:\Program Files\program.exe"
ฉันต้องการให้โปรแกรมเริ่มต้นหลังจากผ่านไปสิบนาทีเท่านั้นหากไม่มีการกดปุ่มใด ๆ
ฉันต้องการให้โปรแกรมไม่เริ่มทำงานหากกดปุ่มใด ๆ ภายในสิบนาที
ฉันควรใช้คำสั่งอะไรในไฟล์. bat
start "" "C:\Program Files\program.exe"
ฉันต้องการให้โปรแกรมเริ่มต้นหลังจากผ่านไปสิบนาทีเท่านั้นหากไม่มีการกดปุ่มใด ๆ
ฉันต้องการให้โปรแกรมไม่เริ่มทำงานหากกดปุ่มใด ๆ ภายในสิบนาที
ฉันควรใช้คำสั่งอะไรในไฟล์. bat
คำตอบ:
ใช้แบตช์ไฟล์ต่อไปนี้:
@echo off
call :controlTimeout 600
if errorlevel 1 (
echo A key was pressed
) else (
echo Time Up
start "" "C:\Program Files\program.exe"
)
exit /b
:controlTimeout
setlocal
start "" /belownormal /b cmd /q /d /c "timeout.exe %~1 /nobreak > nul"
timeout.exe %~1 & tasklist | find "timeout" >nul
if errorlevel 1 ( set "exitCode=0" ) else (
set "exitCode=1"
taskkill /f /im timeout.exe 2>nul >nul
)
endlocal & exit /b %exitCode%
เครดิต: ไฟล์แบตช์ข้างต้นอ้างอิงจากการเขียนสคริปต์ชุดคำตอบของ StackOverflow windows: ตรวจจับการตอบสนองของผู้ใช้ต่อคำสั่ง "timeout"โดยMC ND
หากคุณไม่ต้องการการนับถอยหลังแบบเห็นภาพแสดงว่ามีวิธีแก้ปัญหาอย่างง่ายโดยใช้ TIMEOUT ซึ่งใช้<backspace>
อักขระ (0x08) เพื่อจัดตำแหน่งหมายเลขนับถอยหลังที่แสดงในแต่ละวินาที
ดูเหมือนว่าตัวเลขจะอยู่ตรงกลางของสตริง แต่ผลลัพธ์ที่ได้จริงมี 0 สุดท้ายเป็นตัวอักษรตัวสุดท้ายตัวสุดท้ายด้วย backspace หรือช่องว่างข้างหน้า หากผู้ใช้กดปุ่ม TIMEOUT จะถูกยกเลิกและ 0 สุดท้ายจะไม่ถูกส่งออก
คุณสามารถไพพ์เอาต์พุตไปที่ FINDSTR เพื่อทดสอบว่า 0 คือเอาต์พุตหมายเลขสุดท้ายหรือไม่
timeout 600 | findstr "[^0-9]0$" >nul && start "" "C:\Program Files\program.exe"
หากคุณได้รับพอร์ตของ Windows tee คุณจะได้รับการนับถอยหลังแบบกึ่งทำงานยกเว้นตัวเลขจะปรากฏขึ้นอย่างผิดพลาดที่ส่วนท้ายของข้อความแทนที่จะเป็นกึ่งกลาง
timeout 600 | tee countdown.txt
findstr "[^0-9]0$" countdown.txt >nul && start "" "C:\Program Files\program.exe"
del countdown.txt