2016-11-26 25 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=: