Arrays in Batch
Hallo,
ich habe mir folgendes Arraykonstrukt überlegt, um Bilddateien in ein Array zu speichern
Es klappt eine bestimmte Position in dem Array abzufragen, allerdings nicht wenn die Position als Variable übergeben wird (z.B. "echo %strArrayName.%%i%%" klappt nicht). Gibt's da Workarounds?
Danke für Eure Tipps.
Gruß
dedalus2011
ich habe mir folgendes Arraykonstrukt überlegt, um Bilddateien in ein Array zu speichern
Es klappt eine bestimmte Position in dem Array abzufragen, allerdings nicht wenn die Position als Variable übergeben wird (z.B. "echo %strArrayName.%%i%%" klappt nicht). Gibt's da Workarounds?
Danke für Eure Tipps.
Gruß
dedalus2011
set strArrayNumber=0
For %%i IN (C:\test\jpg\"* - ????????_*.jpg") do (for /f %%a in ("%%~ni") ^
do (set strArrayValue=%%a && call:functionArray))
goto :end
:functionArray
set /a strArrayNumber=%strArrayNumber% + 1
set strArrayName.%strArrayNumber%=%strArrayValue%
goto :eof
:end
set /a i = 1
----> echo %strArrayName.%%i%%
set temp=%strArrayName.2%
echo %temp%
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 187916
Url: https://administrator.de/contentid/187916
Ausgedruckt am: 24.11.2024 um 08:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo dealus2011!
Ich halte es zwar für grundsätzlich wenig sinnvoll, in Batch ein Array zu simulieren, aber wenn Du glaubst zu müssen, verwende zB folgende Zeile 19:
Um alle Elemente abzuarbeiten dann etwa so:
Grüße
bastla
P.S.: Für die Zeilen 3 und 4 sollte auch
oder
(dann kannst Du vorweg schon nach Namen oder - mit "
Ich halte es zwar für grundsätzlich wenig sinnvoll, in Batch ein Array zu simulieren, aber wenn Du glaubst zu müssen, verwende zB folgende Zeile 19:
call echo %%strArrayName.%i%%%
setlocal enabledelayedexpansion
for /L %%i in (1,1,%strArrayNumber%) do echo !strArrayName.%%i!
endlocal
bastla
P.S.: Für die Zeilen 3 und 4 sollte auch
For %%i IN ("C:\test\jpg\* - ????????_*.jpg") do set "strArrayValue=%%~ni" & call:functionArray
For /f "delims=" %%i IN ('dir /b/on "C:\test\jpg\* - ????????_*.jpg"') do set "strArrayValue=%%~ni" & call:functionArray
/od
" - nach Änderungsdatum sortieren) genügen ...
moin,
wenn das Array bei 1 beginnt.
Gruß Phil
wenn das Array bei 1 beginnt.
for /f "tokens=1*delims=:" %%i in ('dir/b/a-d-s-h "C:\test\jpg\* - ????????_*.jpg" ^|findstr /n "^" ') do set "strArrayName.%%i=%%j"
rem für einen Teil davon
set strArrayName. |findstr /b strArrayName.2[0-3]=
set /a i=5
set strArrayName. |findstr /b strArrayName.%i%=
Gruß Phil
Hallo dedalus2011!
Könntest Du vielleicht trotzdem vorweg einmal erklären, was das eigentlich für einen Zweck hat und weshalb Du Dich so auf "Array" versteifst?
Ansonsten:
Weiche auf ein Unterprogramm aus, dann brauchst Du keine "
Wozu die Indexvariable, wenn ohnehin in jedem Fall hochgezählt wird und Du in "
Außerdem kann "
Am wenigsten klar ist mir allerdings, was Du mit
bezweckst ...
Grüße
bastla
Könntest Du vielleicht trotzdem vorweg einmal erklären, was das eigentlich für einen Zweck hat und weshalb Du Dich so auf "Array" versteifst?
Ansonsten:
Weiche auf ein Unterprogramm aus, dann brauchst Du keine "
delayedexpansion
".Wozu die Indexvariable, wenn ohnehin in jedem Fall hochgezählt wird und Du in "
%%i
" mit der Zeilennummer schon einen "Index" zuf Verfügung hast?Außerdem kann "
%var%
" in der Schleife nicht funktionieren, wenn Du den Wert von %var% in der Schleife veränderst - dann muss das "!var!
" sein.Am wenigsten klar ist mir allerdings, was Du mit
set !t!=t
Grüße
bastla
Hallo dedalus2011!
Ich tendiere in diesem Fall zu einer etwas übersichtlicheren Schreibweise:
Beide Varianten der Zuweisung (Zeilen 5 und 6) sollten so funktionieren ...
Grüße
bastla
Ich tendiere in diesem Fall zu einer etwas übersichtlicheren Schreibweise:
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do (
if "%%j" neq "!var!" (
set "Zeile=%%j"
echo %%i
call set "var=%%strArrayName.%%i%%"
rem set "var=!strArrayName.%%i!
echo !var!
call :ProcessLine
)
)
das Array sollte mir dabei helfen, Zeilen mit dem gleichen Index zu vergleichen.
Das sollte sich vermutlich auch einfach in einer "for
"-Schleife machen lassen (analog zur Vorgehensweise in Thread "Zwei Texte Zeilenweise zusammenfügen per batch"), aber meinetwegen ...Grüße
bastla
moin dedalus,
wenn Du Dateien mit dem selben Zeilenindex vergleichen willst, kommst Du doch mit ein paar Findstr besser.
Gruß Phil
wenn Du Dateien mit dem selben Zeilenindex vergleichen willst, kommst Du doch mit ein paar Findstr besser.
@echo off
(for %%i in (a b c ) do @echo %%i
)>Datei1
(for %%i in (a bx c ) do @echo %%i
)>Datei2
findstr /n "^" Datei1 >LN1
rem Für gleiche Zeilen
findstr /n "^" Datei2 |findstr /xg:LN1
rem Für unterschiedliche Zeilen
findstr /n "^" Datei2 |findstr /vxg:LN1
Gruß Phil