【发布时间】:2016-06-08 15:11:51
【问题描述】:
我正在尝试将 JSON 中的命令输出格式化为:
echo "patches" : {
set patches="wmic qfe get HotfixID"
for /f "skip=1" %%i in (' %patches% ') do (
set /a count=count+1
call echo "!count!" : "%%i",
)
echo }
一切都很好,直到我到达补丁列表的末尾,它读取最后一个补丁之后的行,然后打印""。
我怎样才能让它在它应该停止的时候停止?
如果可能,我想避免使用文本文件。
【问题讨论】:
-
在
for /f循环中,放置另一个for /f "delims=" %%j in ("%%i") do并在您的echo中使用%%j;因为wmic返回 Unicode 输出,而for /f不适合处理它,for /f输出像孤立的回车这样的伪影,导致你遇到的效果;在内部放置另一个for /f循环,因此对每个项目进行双重处理会删除此类伪像... -
有一个bunch of different methods 可以绕过那些
wmic行尾。虽然我认为,第二个for是其中最通用的。 -
是的,@Stephan,但是 double-
for /f-loop 方法是最简单、最安全的方法,因为它可以处理具有任何特殊字符序列的字符串...(我知道您可以查询另一个项目并稍后将其关闭,这同样安全,但这不是通用的,因为它仅适用于/TABLE输出,但不适用于/VALUE输出...)
标签: batch-file cmd output