I am trying to format the output of a command in JSON as such:
echo \"patches\" : {
set patches=\"wmic qfe get HotfixID\"
for /f \"skip=1\" %%i in (\' %patches%
Inside the for /f
loop, place another one:
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
rem // use `%%j` in the loop body
)
The wmic
command returns Unicode output. Since for /f
is not perfect for handling such, it produces artefacts like orphaned carriage-returns (CR), leading to the effect you encounter (the last line does not appear empty to your for /f %%i
loop as it contains such a CR; remember that for /f
skips lines that are really empty). Placing another for /f
loop inside and hence double-processing each item removes such artefacts.
Here is the fixed script:
echo "patches" : {
set "patches=wmic qfe get HotfixID"
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
set /a count=count+1
echo "!count!" : "%%j",
)
echo }
Since I did not get the purpose of the call
command, I simply removed it.
The double-parsing method is actually credited to dbenham -- see his answer to Why is the FOR /f loop in this batch script evaluating a blank line? and also his external article WMIC and FOR /F : A fix for the trailing