用cmd.exe for循环处理包含回车<CR>



我正试图在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

相关内容

最新更新