[操作疑難] 請教WINDOWS CMD

本帖最後由 bentse369 於 2016-7-14 17:58 編輯

小弟有關WINDOWS 上的CMD 唔識,請求各大神指點。
要寫一個BATCH FILE, 裡面係大概有3~5 個SERVICES需要關閉,並每一個SERVICES 關閉時間隔距 5 sec 左右,其後一定要確定全部services 闗閉後,執行 "方法1",否則嘗試 關閉5次也不成功後,執行"方法2"
小弟大約寫左CMD如下,但唔成功:
********************************************************************
@echo off
set loopcount=5
:loop
echo Retry to stop services
net stop <Services name 1>
timeout /t 5
net stop <Services name 2>
timeout /t 5
net stop <Services name 3>
timeout /t 5
net stop <Services name 4>
timeout /t 5
set /a loopcount=loopcount-1
if /I ( sc query "Services name 4" |findstr /i "stopped" goto exitloop
) else (
if %loopcount% ==0 goto failureloop )
TIMEOUT /t 6
goto loop

:exitloop  //方法1
echo Successful

:failureloop  //方法2
echo failed
***************************************************************
請指教

點唔成功?有無詳細D error?

TOP

個Services name 4要係SERVICE_NAME, 唔係DISPLAY_NAME

例: sc query wudfsvc

TOP

點唔成功?有無詳細D error?
atenza 發表於 2016-7-15 15:50


唔可以令BATCH 知道 SERVICES 既狀態,從而跳去下一個步驟。
比方說,當SERVICES STATE = STOPPED GOTO  方法一
否則SERVICES STAT = RUNNING GOTO 方法二
現在失敗狀態是:
不論SERVICES 什麼狀態,也不會跳去任何方法
謝謝師兄

TOP

個Services name 4要係SERVICE_NAME, 唔係DISPLAY_NAME

例: sc query wudfsvc
patkm 發表於 2016-7-15 16:35


但怎樣令電腦知道 當SERVICE 是RUNNING GOTO 方法二, 當SERVICES 是 STOPPED GOTO 方法一?

謝謝師兄。

TOP

本帖最後由 marlin12 於 2016-7-17 08:14 編輯

findstr唔係咁用,呢個函數係會將結果反影在errorlevel上
(errorlevel = 0) 代表有找到字串
(errorlevel = 1) 代表沒有找到字串
(errorlevel = 2) 代表wrong syntax

另外,如果你唔想findstr把找到的字串傳到stdout,可以redirect去nul。

因此,正確的用法是
sc query <Services name 4> | findstr /I "stopped" > nul
if %errorlevel% == 0 (
    goto exitloop
) else (
    if %loopcount% ==0  goto failureloop  )

TOP

每次執行完 net stop <Service name>  後,
馬上檢查 ERRORLEVEL 便可知道該次之執行結果,
net helpmsg 0 便是其回傳數為0之解釋.
但要留意比較 errorlevel  時不要有function改變了 errorlevel 值,
可參考 http://www.robvanderwoude.com/errorlevel.php

TOP

findstr唔係咁用,呢個函數係會將結果反影在errorlevel上
(errorlevel = 0) 代表有找到字串
(errorlevel =  ...
marlin12 發表於 2016-7-16 21:07


謝謝師兄,小弟試試先。

TOP

每次執行完 net stop   後,
馬上檢查 ERRORLEVEL 便可知道該次之執行結果,
net helpmsg 0 便是其回傳數為0 ...
Charcoal99 發表於 2016-7-16 21:35


雖然唔係太明師兄既解說,不過謝謝師兄提供LINK 作參考。
謝謝。

TOP