流程:
- 使用 set /P 讀取輸入的字串,再使用 if 判斷要執行的指令
- 為避免重覆啟動 nginx,若選擇 start nginx,先用 tasklist 列出目前系統執行的程序,傳給 find 過濾要找的程序名稱,再使用 %ERRORLEVEL% 判斷 nginx.exe 是否已在執行中
範例:
@echo off :mm echo ########################################################## echo 1:start nginx echo 2:nginx -s stop (fast shutdown) echo 3:nginx -s quit (graceful shutdown) echo 4:nginx -s reload echo (changing configuration, echo starting new worker processes with a new configuration, echo graceful shutdown of old worker processes) echo 5:nginx -s reopen (re-opening log files) set act=0 set /P act=選擇要執行的指令[1/2/3/4/5]: if %act%==1 ( goto m1 ) if %act%==2 ( goto m2 ) if %act%==3 ( goto m3 ) if %act%==4 ( goto m4 ) if %act%==5 ( goto m5 ) cls echo 請輸入1~5任一數字 goto mm :m1 cls echo %act% REM 判斷nginx.exe是否已經在執行 tasklist /NH | find /I "nginx.exe" if %ERRORLEVEL% == 1 ( start nginx echo start nginx echo ... ) else ( echo 程式已在執行中,請先停止 ) goto mm :m2 cls echo %act% nginx -s stop echo nginx -s stop echo ... goto mm :m3 cls echo %act% nginx -s quit echo nginx -s quit echo ... goto mm :m4 cls echo %act% nginx -s reload echo nginx -s reload goto mm :m5 cls echo %act% nginx -s reopen echo nginx -s reopen echo ... goto mm
參考:
How to read input from console in a batch file?
DOS中判断进程是否存在的方法
XYZ版主大大,我想請教一件事情
回覆刪除使用 "set /p var1=XXXXXXX"指令
會對電腦造成什麼影響嗎@@ 比如說修改到電腦本身的環境變數
有勞您了
"set /p var1=XXXXXXX"
刪除將使用者輸入的值,指派給var1
如果var1是環境變數,我試的結果是也會改變。
如果您擔心的是之後整個系統var1環境變數都變了。
可以另開一個視窗輸出var1環境變數測試看看。
我試的結果是只在原本的cmd視窗有影響。
可以 set /? 查看指令的用法,或許對測試有幫助。
剛找到微軟官網的說明。
刪除https://msdn.microsoft.com/zh-tw/library/cc737438%28v=ws.10%29.aspx
「在命令殼層中,Cmd.exe 的每個例項,會繼承其上層應用程式的環境。因此,您可以在新的 Cmd.exe 環境中變更變數,而不會影響到該上層應用程式的環境。」
「使用 set 命令以建立、變更、刪除或顯示環境變數。set 命令僅變更目前殼層環境中的變數。」
謝謝XYZ大大@@,打擾您了。
刪除下次我會先查查MS官網說明...
都沒想到有這東西,謝謝XYZ版主。
其實也是因為您有問,我才發現官網有說明 :)
刪除