Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - Variablen werden nicht richtig gesetzt

Frage Entwicklung Batch & Shell

Mitglied: eQuest

eQuest (Level 1) - Jetzt verbinden

01.09.2010, aktualisiert 10:20 Uhr, 3342 Aufrufe, 6 Kommentare

Hi Community,
ich habe ein Problem mit folgendem Skript:

01.
@echo off 
02.
 
03.
set /a i=0 
04.
 
05.
set zield_1=C: 
06.
set zield_2=D: 
07.
set zield_3=E: 
08.
 
09.
for /L %%i IN (1,1,3) do ( 
10.
	set zield_x= 
11.
	if "%%i"=="1" ( 
12.
		echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_1% 
13.
		set zield_x=%zield_1% 
14.
15.
	if "%%i"=="2" ( 
16.
		echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_2% 
17.
		set zield_x=%zield_2% 
18.
19.
	if "%%i"=="3" ( 
20.
		echo zield_x hat den Wert %zield_x% und wird gesetzt auf %zield_3% 
21.
		set zield_x=%zield_3% 
22.
23.
	echo %zield_x% 
24.
)
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:
01.
	zield_x hat den Wert E: und wird gesetzt auf C: 
02.
	E: 
03.
	zield_x hat den Wert E: und wird gesetzt auf D: 
04.
	E: 
05.
	zield_x hat den Wert E: und wird gesetzt auf E: 
06.
	E:
Danke im Vorraus für eure Hilfestellungen!
Mitglied: BigWim
01.09.2010 um 10:46 Uhr
Ich bin mir (fast) sicher, dass Dir ein

01.
SETLOCAL ENABLEEXTENSIONS 
fehlt.

Um innerhalb von for-Schleifen Variablen zu setzen, mußt Du die "verzögerte Erweiterung von Umgebungsvariablen" einschalten.

Siehe mal unter

help set
help setlocal
help cmd (Parameter /V)

Markus
Bitte warten ..
Mitglied: bastla
01.09.2010 um 11:01 Uhr
@BigWim
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
oder
01.
for %%i in (C: D: E:) do ( 
02.
    echo Bearbeite Laufwerk %%i 
03.
)
oder
01.
for %%i in (C: D: E:) do call :ProcessDrive %%i 
02.
goto :eof 
03.
 
04.
:ProcessDrive 
05.
echo Bearbeite Laufwerk %1 
06.
goto :eof
Da sich das Unterprogramm wie ein eigener Batch verhält, kommt der übergebene Parameter dort als %1 an ...
Um aber, der Vollständigkeit halber, auch auf die ursprüngliche Variante einzugehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set zield_1=C: 
04.
set zield_2=D: 
05.
set zield_3=E: 
06.
 
07.
for /L %%i IN (1,1,3) do ( 
08.
    echo zield_x hat den Wert !zield_x! und wird gesetzt auf %zield_1%  
09.
    set "zield_x=!zield_%%i!" 
10.
    echo !zield_x! 
11.
)
Grüße
bastla
Bitte warten ..
Mitglied: eQuest
01.09.2010 um 11:16 Uhr
danke für die schnellen Hilfestellungen.

Also ich habe das jetz mal probiert mit dem "setlocal enabledelayedexpansion", aber geändert hat sich irgendwie nichts
Das Skript schaut jetzt folgendermaßen aus:

01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set /a i=0 
04.
 
05.
set zield_1=C: 
06.
set zield_2=D: 
07.
set zield_3=E: 
08.
 
09.
for /L %%i IN (1,1,3) do ( 
10.
	set "zield_x=!zield_%%i!"  
11.
 
12.
	echo %zield_x% 
13.
)
Er meint immer noch E:, E:, E: ..

Nja ich mache ja die for-schleife für eine bessere Struktur und weniger Code. Der Bearbeitungscode für die Ordner würde unter den 3 If's stehen bei "echo %zield_X%". Natürlich könnte ich das auch 3mal schreiben in den einzelnen Ifs, aber dann könnte ich mir die ganzen if's und das for sparen und für jeden Ordner die 20 Zeilen Bearbeitung richtig hässlich untereinander schreiben ^^"
Bitte warten ..
Mitglied: bastla
01.09.2010 um 11:22 Uhr
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
Bitte warten ..
Mitglied: eQuest
01.09.2010 um 11:23 Uhr
ahh verwirrung :D
ok habe jetz deine neue variante gesehen und sie funktioniert, danke ^^
Bitte warten ..
Mitglied: eQuest
02.09.2010 um 10:46 Uhr
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...