2017-03-05 125 views
-1
for %%f in ('wmic service where 'name like 'Steam Client%%'") do set Service=%%f 
echo %Service% 

我在做什麼錯了? ?變量中WMIC命令的輸出

+0

什麼是輸出的,什麼是您的期望? –

+0

我正在尋找批處理文件來返回我的服務名稱,它會問我是否停止/啓動服務。 –

回答

0

這是我想做到這一點額外的濾波輸出。

第二個for循環僅更快從輸出剝去一些問題的字符,多以同樣的方式作爲FindStr例子。然後,我實現了一個Call來去除填充返回的Get字符串末尾的尾部空格。

@Echo Off 
For /F "Skip=1 Delims=" %%A In (
    '"WMIC Service Where (Name Like 'Steam%%') Get Name"' 
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%B 
Echo("%Service%" 
Timeout -1 
GoTo :EOF 

:Sub 
Set "Service=%*" 
GoTo :EOF 

上面的代碼是完全未測試如我使用的機器人裝置。

+0

這更像它:D:D –

0

是不是在('wmic service where 'name like 'Steam Client%%'")最後的支架應該是「不」在任何情況下,我從來沒有嘗試過使用WMIC服務,只有這個樣子WMIC win32_localtime:FOR /F %%F IN ('wmic path win32_localtime get dayofweek^|Findstr [0-6]') DO SET DOW=%%F

編輯:我注意到幾個至少在我能理解的地方,如果你希望通過FOR語句來評估代碼的輸出,你需要在FOR和變量之前的/ F infront。你通常也需要使用單引號(')開始和結束包含該命令的括號。如下所示:for /f %%f in ('wmic service where name like "Steam Client%%"') do set Service=%%f echo %Service%

對於任何有關WMIC查詢的幫助this可能會幫助

希望這有助於。

+0

我希望批處理文件找到服務的名稱並將其顯示在屏幕上。感謝你的快速回復。 –

+0

您是否注意到此答案的第一個相關部分?你應該在括號內使用命令的地方需要用單引號(')結束(並開始)。然後是第二部分,我在那裏展示了我爲了使用命令而執行的命令。如果在語句中使用命令,則需要在FOR前加上/ F。 – Elven

2
for /F "tokens=*" %%f in ('wmic service where "name like "Steam%%"" get Name ^| findstr /V /R "^$"') do set Service=%%f 
echo %SERVICE% 

輸出

Steam Client Service 

誤區代碼:

  • 沒有用/F開關與環
  • 採用單和雙引號混合。
  • 沒有指定一個特定的屬性與get條款
  • 得到不與findstr
+0

非常感謝。它工作:) –

+0

這出「蒸汽客戶服務」給我尾隨空格。像 「Steam客戶端服務(空格)」 –

+0

http://stackoverflow.com/questions/3001999/how-to-remove-trailing-and-leading-whitespace-for-user-provided-input-in-a-batch – abelenky