0
我想打印出补丁列表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
它给了我一个空变量。
如何传递另一个变量内的变量?
您正在将%count1%初始化为1,但将%index%初始化为0.这就是导致第一个元素为空的原因。初始化%count1%为0,看看是否修复它。 – rojo
我仍然得到同样的东西。即使%count1%= 0我不应该看到'“patch [0]”'? – KH17
我不这么认为,因为在设置第一个元素之前你正在递增count1。数组中的第一个元素是'patch [1]'。但是如果'patch [1]'为空,那么你可能不得不在'for/f'循环中将'skip = 1'更改为'skip = 2'。 – rojo