Batch - Variablen werden nicht richtig gesetzt
Hi Community,
ich habe ein Problem mit folgendem Skript:
Was ich will ist, dass je nachdem, welchen Wert der Counter i hat, die Variable zield_x verschieden initialisiert wird (um so später all meine
Verzeichnisse durchlaufen zu können). Nur irgendwie wird die Variable immer nur mit E: initialisiert o0
Folgende Ausgabe erscheint:
Danke im Vorraus für eure Hilfestellungen!
ich habe ein Problem mit folgendem Skript:
@echo off
set /a i=0
set zield_1=C:
set zield_2=D:
set zield_3=E:
for /L %%i IN (1,1,3) do (
set zield_x=
if "%%i"=="1" (
echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_1%
set zield_x=%zield_1%
)
if "%%i"=="2" (
echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_2%
set zield_x=%zield_2%
)
if "%%i"=="3" (
echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_3%
set zield_x=%zield_3%
)
echo %zield_x%
)
Was ich will ist, dass je nachdem, welchen Wert der Counter i hat, die Variable zield_x verschieden initialisiert wird (um so später all meine
Verzeichnisse durchlaufen zu können). Nur irgendwie wird die Variable immer nur mit E: initialisiert o0
Folgende Ausgabe erscheint:
zield_x hat den Wert E: und wird gesetzt auf C:
E:
zield_x hat den Wert E: und wird gesetzt auf D:
E:
zield_x hat den Wert E: und wird gesetzt auf E:
E:
Danke im Vorraus für eure Hilfestellungen!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150099
Url: https://administrator.de/contentid/150099
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
6 Kommentare
Neuester Kommentar
@BigWim
Richtiges Stichwort, falscher Befehl - benötigt wird "
@eQuest
In den meisten Fällen macht es in Batch wenig Sinn, "Pseudo-Arrays" zu erzeugen - meist genügt es, sofort (in der Schleife oder einem per "
oder
oder
Da sich das Unterprogramm wie ein eigener Batch verhält, kommt der übergebene Parameter dort als
Um aber, der Vollständigkeit halber, auch auf die ursprüngliche Variante einzugehen:
Grüße
bastla
Richtiges Stichwort, falscher Befehl - benötigt wird "
setlocal enabledelayedexpansion
" ...@eQuest
In den meisten Fällen macht es in Batch wenig Sinn, "Pseudo-Arrays" zu erzeugen - meist genügt es, sofort (in der Schleife oder einem per "
call :Unterprogramm
" aufgerufenen - internen - Unterprogramm) die nötigen Bearbeitungsschritte für jedes Laufwerk durchzuführen - Du könntest also etwa schreiben:for %%i in (C: D: E:) do echo Bearbeite Laufwerk %%i
for %%i in (C: D: E:) do (
echo Bearbeite Laufwerk %%i
)
for %%i in (C: D: E:) do call :ProcessDrive %%i
goto :eof
:ProcessDrive
echo Bearbeite Laufwerk %1
goto :eof
%1
an ...Um aber, der Vollständigkeit halber, auch auf die ursprüngliche Variante einzugehen:
@echo off & setlocal enabledelayedexpansion
set zield_1=C:
set zield_2=D:
set zield_3=E:
for /L %%i IN (1,1,3) do (
echo zield_x hat den Wert !zield_x! und wird gesetzt auf %zield_1%
set "zield_x=!zield_%%i!"
echo !zield_x!
)
bastla
Hallo eQuest!
Du hast Deinen Test gestartet, bevor ich meinen Kommentar um die Beispiele ergänzt hatte - versuch es also vielleicht damit nochmals ...
... und, wichtig: Jede Variable, deren Wert erst in der Schleife geändert wurde, muss mit "!" anstelle von "%" geschrieben werden, um diesen geänderten Wert auch sofort verwenden zu können.
Grüße
bastla
Du hast Deinen Test gestartet, bevor ich meinen Kommentar um die Beispiele ergänzt hatte - versuch es also vielleicht damit nochmals ...
... und, wichtig: Jede Variable, deren Wert erst in der Schleife geändert wurde, muss mit "!" anstelle von "%" geschrieben werden, um diesen geänderten Wert auch sofort verwenden zu können.
Grüße
bastla