2016-11-26 24 views
0

我想刪除的設備名稱:+空間從結果如何用awk用空格作爲seperater

C:\>sample.exe | grep DeviceName | awk -F "(:)" "{print $0}" 
DeviceName: Roger M's iPhone 

此命令工作得很好,但是當我在一個批處理文件添加它,結果只有羅傑。

C:\>sample.exe | grep DeviceName | awk -F "(:)" "{print $2}" 
Roger M's iPhone 

for /f "tokens=1 " %%a in ('C:\sample.exe ^| grep DeviceName ^| awk -F "(:)" "{print $2}"') do set NAME=%%a 
echo %name% 
Roger 

回答

2

應與for /f "tokens=*"代替for /f "tokens=1"工作,閱讀有關For /F loop description令牌。

接着代碼段可以工作以及(覆蓋第一令牌%%a,採取%%b):

for /f "tokens=1*" %%a in ('C:\sample.exe ^| grep DeviceName') do set NAME=%%b 
echo %name% 

的另一種方法:Variable Edit/Replace

for /f "tokens=*" %%a in ('C:\sample.exe ^| grep DeviceName') do set NAME=%%a 
echo %name:DeviceName: =% 

實施例:

d:\bat> set "_name=DeviceName: Roger M's iPhone" 

d:\bat> echo %_name% 
DeviceName: Roger M's iPhone 

d:\bat> echo %_name:DeviceName: =% 
Roger M's iPhone 

d:\bat> 
+1

由於後的餘數, 令牌= N的編號的項目從每個線 讀取(默認值= 1 tokens = *會導致每行上的所有項目都被處理 tokens = 3 *會處理第三個標記和第四個+所有後續項目,這也可以寫成標記= 3,* – rcmpayne

0

甲解決方案不使用GNU工具:

for /f "tokens=1* delims=: " %%a in (
    'C:\sample.exe ^|findstr /i "^DeviceName:"' 
) do set "Name=%%b" 
echo %Name% 

此操作,因爲連續delims計爲一個和令牌= 1 *被該線的tokens=: