最終能夠將以下工作放在一起,但有一個額外的路線。批量取得盛大母公司的WMIC
For /f "tokens=1,2 skip=1 delims=\" %%i IN (
'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName'
) DO (
echo %%i\%%j
)
Pause
運行時,我們看到:
- d:\ tomcat的
- d:\ tomcat2
- \
和\是不正確的。
最終能夠將以下工作放在一起,但有一個額外的路線。批量取得盛大母公司的WMIC
For /f "tokens=1,2 skip=1 delims=\" %%i IN (
'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName'
) DO (
echo %%i\%%j
)
Pause
運行時,我們看到:
和\是不正確的。
圍繞另一個for /F
環裹擺脫Unicode到ANSI文本轉換人爲因素(如孤兒回車字符)留下的for /F
:
for /F "skip=1 delims=" %%a in ('
wmic Service where "Name LIKE 'tomcat%%'" get PathName
') do (
for /F "tokens=1,2 delims=\" %%i in ("%%a") do (
echo %%i\%%j
)
)
外環讀取除了你想要跳過的行之外的完整行;內部的人解析文本。
我喜歡這個答案最好,因爲它涵蓋了需要什麼,如果我們玩腳本高爾夫,我認爲這是贏家!我很欣賞這個問題的所有投入。 – Leptonator
如果您想批量執行此操作,則可以使用此語法。這只是給你父母和祖父母文件夾。如果您需要完整的路徑,請將dp
修飾符添加到FOR變量中。
@echo off
For /f "skip=1 delims=" %%G IN ('WMIC service WHERE "name LIKE 'wdpostman'" GET PathName ^|findstr /r /V "^$"') DO (
for %%H in ("%%~dpG\.") do set "parent=%%~nxH"
for %%H in ("%%~dpG\..") do set "gparent=%%~nxH"
)
echo parent=%parent%
echo gparent=%gparent%
只是想添加這組額外的代碼,告訴你如何將文件夾路徑分解成變量。
@echo off
setlocal enabledelayedexpansion
For /f "skip=1 delims=" %%G IN ('WMIC service WHERE "name LIKE 'wdpostman'" GET PathName ^|findstr /r /V "^$"') DO (
set "_fpath=%%~dpG"
)
set "_fpath=%_fpath:~0,-1%"
set i=1
set "_spath!i!=%_fpath:\=" & set /A i+=1 & set "_spath!i!=%"
echo There %i% Folder(s^)
set _spath
Pause
我收到以下內容:'批處理參數 替換中的路徑運算符的以下用法無效:%〜dpG \ ..' – Leptonator
對不起。我錯過了兩倍的%。 – Squashman
不完全..我只是指着:http://stackoverflow.com/questions/15685816/how-can-i-remove-empty-lines-from-wmic-output從我的一個同事..發佈現在的解決方案。 – Leptonator
我的一個在我的同事向我指出:
How can I remove empty lines from wmic output? - 更具體地說:https://stackoverflow.com/a/15686239/175063
For /f "tokens=1,2 skip=1 delims=\" %%i IN (
'WMIC service WHERE "name LIKE 'tomcat%%'" GET PathName ^| findstr /r /v "^$"'
) DO (
echo %%i\%%j
)
Pause
我知道這是不是因爲@ Squashman的解決方案爲優雅,但這種是我正在尋找或至少類似。
所以真的這應該被標記爲重複的問題? – Squashman
這是我的經驗,PathName實際返回其他行。當我說我的意思是在WMIC命令通常的「奇怪」輸出之上。爲了確保你的輸出不受影響,我會使用Call
來解決它。
@Echo Off
For /F "Skip=1 Delims=" %%A In (
'"WMIC Service Where (Name Like 'tomcat%%') Get PathName"'
) Do Call :Sub %%A
Timeout -1
GoTo :EOF
:Sub
If Not "%~1"=="" Echo(%*
我會推薦PowerShell而不是批處理(一行):'gwmi Win32_Service -Filter「Name LIKE'tomcat%'」| %{$ _ PathName}' –