消除不必要的逗号为JSON格式批量
问题描述:
我想打印出补丁列表JSON格式这样:消除不必要的逗号为JSON格式批量
"patches" : {
"1" : "KB123456",
"2" : "KB123456", ...
但是这就是我得到:
"patches" : {
"1" : "",
"2" : "patch[2]",
"3" : "patch[3]", ...
这是我的代码
@echo off
set count1=1
setlocal enabledelayedexpansion
set patches="wmic qfe get HotfixID"
for /f "skip=1" %%i in (' %patches% ') do for /f "delims=" %%j in ("%%i") do (
set patch[%count1%]=%%j
set /a count1=count1+1
)
if %count1%==1 (
echo "patch" : "%patch[1]%",
) else (
echo "patches" : {
set index=0
:loop
set /a index=index+1
for /f "tokens=1" %%G in (" %patch[1]% ") do set p1=%%G ::<---*
echo %p1%
rem set p=%patch[!index!]%
rem echo "!index!" : "%p%",
if NOT "%index%" == "%count1%" goto :loop
set p=%patch[%count1%]%
echo "%count1%" : "%p%"
echo }
)
endlocal
在我的第一for
环路我设置阵列补丁收到来回每个补丁m命令输出。之后,我试图读取数组中的每个元素并按顺序打印它们。
*这里确实打印了第一个元素。但是当我用
for /f "tokens=1" %%G in (" %patch[!index!]% ") do set p1=%%G
它给了我一个空变量。
如何传递另一个变量内的变量?
答
所以我发现批量生成for
循环的行为与其他语言不一样。它似乎不是一个迭代,而是在同一时间完成所有事情。如果您想在for
循环内增加一个变量并对其进行处理,您需要添加setlocal enabledelayedexpansion
并将变量置于!
之间。但是,一旦你在循环之外,你可以使用%
_ %
来访问它,就像我在count_patch
中那样。
@echo off
set count_patch=0
set idx=0
setlocal enabledelayedexpansion
set patches="wmic qfe get HotfixID"
for /f "skip=1" %%i in (' %patches% ') do for /f "delims=" %%j in ("%%i") do (
set /a count_patch=count_patch+1
set patch[!count_patch!]=%%j
)
if %count_patch%==1 (
echo "patch" : "%patch1%",
) else (
echo "patches" : {
for /f "skip=1" %%i in (' %patches% ') do for /f "delims=" %%j in ("%%i") do (
set /a idx = idx+1
if !idx!==%count_patch% (echo "!idx!" : "%%j") else (echo "!idx!" : "%%j",)
)
echo }
)
endlocal
所以我所做的就是,我算补丁的数量,然后通过他们再次重复直到我的索引(IDX)具有相同的值作为补丁数量和打印出的结果没有一个逗号。
您正在将%count1%初始化为1,但将%index%初始化为0.这就是导致第一个元素为空的原因。初始化%count1%为0,看看是否修复它。 – rojo
我仍然得到同样的东西。即使%count1%= 0我不应该看到'“patch [0]”'? – KH17
我不这么认为,因为在设置第一个元素之前你正在递增count1。数组中的第一个元素是'patch [1]'。但是如果'patch [1]'为空,那么你可能不得不在'for/f'循环中将'skip = 1'更改为'skip = 2'。 – rojo