Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3392 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

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

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 Variable per Batch auslesen und in Registry schreiben (3)

Frage von Zendara zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Windows 7
gelöst SSD - Win7 Lags (20)

Frage von ph5555 zum Thema Windows 7 ...

Firewall
gelöst Firewall Firmeneimsatz (19)

Frage von wiesi200 zum Thema Firewall ...