簡體   English   中英

在Windows命令提示符下,如果沒有輸入,如何在一定時間內運行一個命令,如果沒有輸入,又如何運行?

[英]In Windows Command prompt, how can I run one command if there is no input, and another if there is, within a certain time?

我不確定如何表達問題,但這是我想做的。

如果服務器進程關閉(由“ ping 1.1.1.1 -n 1 -w 3000 >nul ”確定),我想提示用戶按任意鍵來關閉服務器,但是如果用戶不按任何鍵,服務器再次運行。 這是我當前的腳本:

@echo off
:start
echo (%time%) Server started.
"C:\jdk1.7.0_72\bin\java.exe" -server -d64 -Xmx4G -Xms1G -XX:+UseConcMarkSweepGC -XX:-UseAdaptiveSizePolicy -XX:MaxGCPauseMillis=50 -XX:+DisableExplicitGC -XX:+AggressiveOpts -Xmn512M -jar spigot.jar nogui
echo (%time%) WARNING: Server closed or crashed, restarting.
ping 1.1.1.1 -n 1 -w 3000 >nul
timeout 15
goto start

如您所見,我已經具有重啟功能,並且可以正常運行。 因此,需要澄清一下:如果用戶按下某個鍵,則服務器將關閉並且不會重新啟動。 如果用戶未按任何鍵,則15秒鍾后服務器將再次啟動。

可以檢測“超時”是否倒計時為0,或者用戶是否按下了鍵。 只要超時間隔> = 10,那么如果TIMEOUT結束倒數,則打印的最后兩個字符將始終為“ 0”。 因此,您只需要使用FOR / F命令捕獲輸出並測試最后兩個字符。

唯一的潛在問題是您將不再在屏幕上看到倒數計時。

@echo off
for /f "delims=" %%A in ('timeout 15') do set "test=%%A"
if "%test:~-2%" equ " 0" (
  echo The user did NOT press a key
) else (
  echo The user pressed a key
)

如果超時間隔小於10,則僅檢查最后一個字符是否為0。

@echo off
for /f "delims=" %%A in ('timeout 5') do set "test=%%A"
if "%test:~-1%" equ "0" (
  echo The user did NOT press a key
) else (
  echo The user pressed a key
)

關於如何將其合並到您的代碼中-我不是很肯定,因為我不完全了解您的代碼應該做什么。

您的PING命令可能無法確定服務器是否已關閉,也無法關閉服務器。 它所做的就是在腳本中引入3秒的延遲。

如果您想在沒有用戶按下鍵的情況下完成超時而返回到:start,那么您所需要做的就是:

for /f "delims=" %%A in ('timeout 15') do set "test=%%A"
if "%test:~-2%" equ " 0" goto start

timeout不會在此處返回錯誤errorlevel W10中的包含錯誤請求,因此使用timeout ,唯一明顯的方法是保存%time% before and see whether the %time% %time% before and see whether the 15秒后-這就充滿了問題。

timeout似乎是將從調用到第二秒結束的時間計為第一秒,實際上是在大約150ms到下一秒之間實際上終止了“第二”(可能取決於CPU負載)。

因此,使用技術性術語“刺激”是一種刺激。 第一個“秒”可能在150毫秒左右到1150毫秒之間,每增加一秒就會增加1000毫秒(例如15秒= 14.15秒鍾.15.15秒鍾)

可能更好的方法是使用choice -重新出現在W7 + AFAIAA上。 從本質上講,這將“中斷”鍵集限制為字母數字和其他一些字母-例如, 空格不能用作“選擇” IIRC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM