Top-Themen

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, 3403 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
Verwendung einer gesetzten Variable noch in derselben Eingabezeile
gelöst Frage von EvaEdenBatch & Shell9 Kommentare

Liebe Gemeinde, ich habe ein simples Problem: Ich muss ein paar Befehle in einer Zeile abschicken. Kein Problem, da ...

Batch & Shell
Batch - Variablen
gelöst Frage von Marlon1Batch & Shell2 Kommentare

Hallo, Ich habe eine Frage zu Variablen. Und zwar ob es irgendwie geht das Batch mit ein IF Befehl ...

Visual Studio
Richtiges Löschen globaler Variablen in VB.NET
gelöst Frage von MarcoBornVisual Studio10 Kommentare

Hallo Forum, ich habe ein Verständnisproblem, wie man Variablen richtig wieder löscht. Folgendes Beispiel. Ich habe ein Programm, das ...

Batch & Shell
Batch-Variable rechnet immer weiter
Frage von ZwergkaninchenBatch & Shell4 Kommentare

Hallo, Leute! Ich wollte mir ein kleines Idle-Game in Batch schreiben, aber ich komm nicht weiter. Hier ist ein ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 10 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 17 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 19 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 22 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...