Es gibt ein paar Stellen, an denen Sie eifrige Erweiterungen (mit %
Trennzeichen) verwendet haben, an denen Sie verzögerte Erweiterungen (mit !
Trennzeichen) hätten verwenden sollen. Das zu beheben scheint das gewünschte Verhalten zu erhalten:
@echo on set LOGFILE=batch.log call :LOG > %LOGFILE% exit /B :LOG setlocal EnableDelayedExpansion set n=0 set count=0 set vector[%n%]=0 for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do ( set filename=%%i for /f "tokens=2 delims=_." %%a in ("!filename!") do ( set vector[!n!]=%%a for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v ) set /A n+=1 )
Um es klar zu sagen: Die Änderungen, die ich vorgenommen habe, sind:
for /f "tokens=2 delims=_." %%a in ("%filename%") do (
gewechselt zu:
for /f "tokens=2 delims=_." %%a in ("!filename!") do (
und:
for /f "tokens=* delims==" %%v in ('set vector[%n%]') do @echo %%v
gewechselt zu:
for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v
Ohne diese Änderungen %filename%
wird immer auf die leere Zeichenfolge %n%
erweitert und auf 0 erweitert (der Wert, auf den es gesetzt wurde, als die äußere for
gestartet wurde); Im letzteren Fall hat dies nur Ihre Ausgabe verfälscht (Sie haben sie !n!
beim Zuweisen richtig verwendet vector
, also hatten sie die korrekten Werte, es wurde lediglich der erste Eintrag gedruckt, selbst wenn Sie Einträge in nachfolgenden Indizes hinzugefügt hatten).