如何使用awk与空格作为seperater

时间:2016-11-26 20:51:36

标签: batch-file awk

我想从结果

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

这个命令工作得很好但是当我在批处理文件中添加它时,结果只有Roger。

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 个答案:

答案 0 :(得分: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 :(得分:0)

不使用gnu工具的解决方案:

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

这是有效的,因为连续的delims被计为1,而tokens = 1 *获得tokens=:之后的剩余部分