2016-06-09 28 views
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 

它给了我一个空变量。

如何传递另一个变量内的变量?

+0

您正在将%count1%初始化为1,但将%index%初始化为0.这就是导致第一个元素为空的原因。初始化%count1%为0,看看是否修复它。 – rojo

+0

我仍然得到同样的东西。即使%count1%= 0我不应该看到'“patch [0]”'? – KH17

+0

我不这么认为,因为在设置第一个元素之前你正在递增count1。数组中的第一个元素是'patch [1]'。但是如果'patch [1]'为空,那么你可能不得不在'for/f'循环中将'skip = 1'更改为'skip = 2'。 – rojo

回答

0

所以我发现批量生成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)具有相同的值作为补丁数量和打印出的结果没有一个逗号。