我正试图在cmd.exe批处理循环中处理命令wmic os get version
的输出。看起来很简单:
for /f %%G in ('wmic os get version') do (
echo %%G
)
但输出是:
Version
10.0.19044
ECHO is off.
最后一行ECHO is off.
表示%%G
是"0";空白";。
好的,没问题,只测试一下:
for /f %%G in ('wmic os get version') do (
if [%%G] neq [] echo %%G
)
输出相同:
Version
10.0.19044
ECHO is off.
那么它是而不是空白吗?经过大量实验,它包含一个单回车字符,即<CR>
,即0x0D aka\r(不要与换行符<LF>
,即0x0A aka\n混淆;还请注意,<CR><LF>
对是标准的windows/dos行终止符),如以下代码所示:
for /f %%G in ('wmic os get version') do (
echo /////////%%G123
)
输出:
/////////Version123
/////////10.0.19044123
123////
所以问题是,如何检测/处理回车的最后一行。我可以用if
比较器检测吗?我能用绳子代替它吗?我可以使用一些for
分隔符吗?我能做什么?我迫切需要的是,为了简洁起见,不要打印最后一行,但可以想象对文本的任何任意处理,包括带有标记和其他delim的for /f
。
WMIC的输出是unicode!
可以通过使值通过另一个CCD_ 11循环来去除尾随的CCD_。
这也去除了幻影";空白";线路(实际上是<CR>
)
@echo off
Title Removing the trailing ^<CR^> by passing the value through another FOR /F
set "Version="
@for /f "delims=" %%a in ('"wmic os get version /Value"') do (
@for /f "delims=" %%b in ("%%a") do if not defined Version set %%b
)
echo OS Version : [%Version%]
pause
编辑:在这里参考这个好答案,wmic输出到文件,没有添加行问题,在这里也来自@Compo;在您的情况下,您也可以更改wmic:/Format:MOF
的输出格式
@echo off
Title Change the output of WMIC into MOF
@For /F Tokens^=6Delims^=^" %%A In ('"WMIC OS Get Version /Format:MOF"') Do Echo OS Version : [%%A]
pause