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-Key: 636531

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: rubberman
Solution rubberman Dec 31, 2020 at 10:19:48 (UTC)
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
Member: supertux
supertux Dec 31, 2020 at 11:55:48 (UTC)
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
Member: rubberman
rubberman Dec 31, 2020 at 16:13:49 (UTC)
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