我想从结果
中删除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
答案 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=:
之后的剩余部分