supertux
Goto Top

Batchabfrage in weitere Variablen setzen

Hallo,

in einer Batch frage ich folgendes ab und setze es in eine Variable.

for /f "tokens=2 delims==" %%a in ('wmic shadowcopy get ID /value') do SET ID1=%%a  

Wenn eine neue Snapshot-ID dazu kommt, habe ich immer nur die letzte ID in der Variable.
Wie bekomme ich es hin, wenn mehre IDs vorhanden sind, diese in weitere Variablen (ID2,ID3,ID4 usw.) zu setzen.

C:\>wmic shadowcopy get ID
ID
{69217288-E627-45B4-AA3D-5238AD437A4E}
{A2A1FDF6-3B1B-4010-ACDB-105254E506D0}

Gruß supertux

Content-ID: 636531

Url: https://administrator.de/contentid/636531

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

rubberman
Lösung rubberman 31.12.2020 um 11:19:48 Uhr
Goto Top
Ungetestet:
@echo off &setlocal EnableDelayedExpansion

set "n=0"  
for /f "tokens=2 delims==" %%a in ('wmic shadowcopy get ID /value') do for /f %%b in ("%%a") do set /a "n+=1" &set "ID!n!=%%b"  

for /l %%i in (1 1 !n!) do echo !ID%%i!

pause
Die verschachtelte FOR /F Schleife ist notwendig um das zusätzliche CR Zeichen (Bug in WMIC) loszuwerden.
Wenn ich sowas sehe, frage ich mich aber immer nach dem Sinn, erst ein assoziatives Array zu bauen. Warum nicht gleich mit %%b in der FOR Schleife weiterarbeiten?

Steffen
supertux
supertux 31.12.2020 um 12:55:48 Uhr
Goto Top
Hallo,

ich bin leider kein Profi in diesen Dingen.

Die Zeile mit for /l %%i in (1 1 !n!) do SET !ID%%i habe ich mit SET geändert.
Der Code funktioniert, aber ich sehe die Variablen der IDs in der Console nicht mehr.

supertux
rubberman
rubberman 31.12.2020 um 17:13:49 Uhr
Goto Top
Warum denn SET? Die FOR /L Schleife war doch nur um zu sehen was du bereits in den Variablen hast (bzw. um zu zeigen wie du darauf zugreifen kannst). Die Zuweisung erfolgt in der FOR /F Schleife. Wenn du mal ein bisschen mehr Kontext geben würdest, was du mit den gespeicherten Werten machen willst, wären diese Variablen aber sicher unnötig. À la ..
@echo off &setlocal EnableDelayedExpansion

for /f "tokens=2 delims==" %%a in ('wmic shadowcopy get ID /value') do for /f %%b in ("%%a") do (  
  echo Mach hier was mit %%b
)

pause
Steffen