ich die Liste der Patches im JSON-Format als solche auszudrucken bin versucht:unerwünschte Komma für JSON Formatierung Batch Entfernen
"patches" : {
"1" : "KB123456",
"2" : "KB123456", ...
Allerdings ist es das, was ich bekomme:
"patches" : {
"1" : "",
"2" : "patch[2]",
"3" : "patch[3]", ...
Dies ist mein Code
@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
In meinem ersten for
Schleife ich das Array Patch bin Einstellung zu jedem Patch her empfangen m die Befehlsausgabe. Danach versuche ich, jedes Element in dem Array zu lesen und sie in der Reihenfolge zu drucken.
* Hier wird das erste Element korrekt gedruckt. Aber wenn ich ersetzen, dass mit
for /f "tokens=1" %%G in (" %patch[!index!]% ") do set p1=%%G
es mir eine leere Variable gibt.
Wie gebe ich eine Variable innerhalb einer anderen Variablen weiter?
Sie initialisieren% count1% auf 1, aber% index% auf 0. Das verursacht das leere erste Element. Init% count1% bis 0 und sehen, ob es das behebt. – rojo
Ich bekomme immer noch das Gleiche. selbst wenn die% count1% = 0 sollte ich nicht sehen "patch [0]" '? – KH17
Ich glaube nicht, weil Sie count1 erhöhen, bevor Sie das erste Element setzen. Das erste Element in Ihrem Array ist 'patch [1]'. Aber wenn 'patch [1]' leer ist, dann müssen Sie möglicherweise 'skip = 1' in' skip = 2' in Ihrer 'for/f'-Schleife ändern. – rojo