Batch file 如何将awk与空格一起用作分隔符

Batch file 如何将awk与空格一起用作分隔符,batch-file,awk,Batch File,Awk,我想从结果中删除DeviceName:+空格 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=

我想从结果中删除DeviceName:+空格

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

如果使用
for/f“tokens=*”
而不是
for/f“tokens=1”
,请阅读中的令牌

下一个代码段也可以工作(覆盖第一个令牌
%%a
,取
%%b
):

另一种方法:

例如:

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>

如果使用
for/f“tokens=*”
而不是
for/f“tokens=1”
,请阅读中的令牌

下一个代码段也可以工作(覆盖第一个令牌
%%a
,取
%%b
):

另一种方法:

例如:

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>

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

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

这是因为连续的delim被计算为一个,而tokens=1*在
tokens=:

一个不使用gnu工具的解决方案之后获取行的剩余部分:

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

这是因为连续的delim被计算为一个,tokens=1*在
tokens=:

谢谢,tokens=n从每行读取的编号项目之后获取行的剩余部分(默认值=1 tokens=*将处理每行上的所有项目tokens=3*将处理第三个标记和第四个+所有后续项目,这也可以写成tokens=3,*谢谢,tokens=n从每行读取的编号项目(默认值=1标记=*将导致处理每行上的所有项目标记=3*将处理第三个标记和第四个+所有后续项目,这也可以写成标记=3*