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

Zusammengesetzte Umgebungsvariable im Batchfile

Frage Entwicklung Batch & Shell

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

01.12.2010 um 08:44 Uhr, 4005 Aufrufe, 2 Kommentare

Hallo,

ich hoffe ihr verzeiht mir die Kurzausführung meiner Problembeschreibung.
Nachdem ich gerade einige Zeit investiert habe um mein Problem schön zu beschreiben, dann aber den Text durch den Zwangslogout nach gefühlt 5Min verloren habe, fehlen mir nun die Kapazitäten alles noch einmal von vorne zu machen. Deshalb die Kurzversion

Folgend mein zusammengekürztes Codebeispiel:

01.
@echo off  
02.
setlocal enabledelayedexpansion 
03.
 
04.
for /f "delims=" %%i in ('dir /a:-d /b *.SQL') do (	 
05.
	set /a counter=1 
06.
	for /f "delims=:" %%j in ('findstr /n /c:"CREATE TABLE" %%i') do ( 
07.
		set %%i_ZeileAb[!counter!]=%%j  
08.
		set /a counter=!counter! + 1 
09.
10.
	 
11.
	set /a counter=1 
12.
	for /f "delims=: tokens=1,2" %%l in ('findstr /n "^" %%i') do ( 
13.
		echo if %%l gtr !%%i_ZeileAb[!!counter!!]!  
14.
15.
16.
 
17.
pause  
Ich durchsuche verschieden .sql-Dateien nach dem String CREATE TABLE (mehrfach pro Datei vorhanden) und speichere die entsprechende Zeilennummer in einer zusammengesezten Umgebungsvariable ab (Teil 1 der Beispiels). Dies funktiert auch sehr gut. Ein SET create zeigt mir die entsprechendne Zeilennummern:

01.
create.SQL_ZeileAb[1]=11 
02.
create.SQL_ZeileAb[2]=21 
03.
create2.SQL_ZeileAb[1]=4 
04.
create2.SQL_ZeileAb[2]=14
Leider bekomme beim Abfragen des Variableninhalts (echo !%%i_ZeileAb[!!counter!!]! ) immer nur den Wert 1 zurück.
Weiß vielleicht jemand wo meine Problem liegt. Ein ähnliches Problem hatte ich bereits beiläufig in meinem Post am Montag beschreiben, doch leider konnte mir wohl niemand weiterhelfen.

Schon mal Danke für eure Mühen und schöen Grüße,
Mario
Mitglied: Mario.Steinberg
01.12.2010 um 09:27 Uhr
Hallo,

ich habe noch etwas geforscht. Mein Problem ist offensichtlich das setlocal enabledelayedexpansion , welches ich an der Stelle, an der ich das echo if %%l gtr !%%i_ZeileAb[!!counter!!]! aufrufe nicht gebrauchen kann.


Ich habe mal versucht mittles:

01.
echo !%%h_ZeileAb_1! 
02.
echo !create2_ZeileAb_1!
auf die Variablen zuzugreifen. Beides hat funktioniert nur der Zugriff via

01.
set /a counter=1 
02.
echo !%%h_ZeileAb_!counter!! 
03.
echo !%%h_ZeileAb_!!counter!!!
nicht!

Gibt es eine Alternative?
Bitte warten ..
Mitglied: Mario.Steinberg
01.12.2010 um 13:21 Uhr
So geschafft!

01.
@echo off  
02.
setlocal enabledelayedexpansion 
03.
 
04.
set ORDNERNAME=Result 
05.
if not exist %ORDNERNAME% mkdir %ORDNERNAME% 
06.
 
07.
for /f "delims=. tokens=1,2" %%h in ('dir /a:-d /b *.SQL') do (	 
08.
	set /a counter=1 
09.
	for /f "tokens=1,4 delims=: " %%j in ('findstr /n /c:"CREATE TABLE" %%h.%%i') do ( 
10.
		set /a %%h_ZeileAb_!counter!=%%j  
11.
		set %%h_Procedurename_!counter!=%%k 
12.
		set /a counter=!counter! + 1 
13.
14.
	 
15.
	set /a counter=!counter! - 1 
16.
	for /l %%k in (1 1 !counter!) do ( 
17.
		set GEFUNDEN=FALSE 
18.
		for /f "delims=:" %%l in ('findstr /n /c:";" %%h.%%i') do ( 
19.
			if %%l gtr !%%h_ZeileAb_%%k! if !GEFUNDEN!==FALSE ( 
20.
				set /a %%h_ZeileBis_%%k=%%l 
21.
				set GEFUNDEN=TRUE 
22.
23.
24.
25.
	 
26.
	for /l %%m in (1 1 !counter!) do (	 
27.
		REM ######### UPDATE PROCEDURE ######### 
28.
		set FILENAME=%ORDNERNAME%\update_!%%h_Procedurename_%%m!.sql 
29.
		if exist !FILENAME! del !FILENAME! 
30.
		 
31.
		echo CREATE PROCEDURE update_!%%h_Procedurename_%%m! ( >> !FILENAME! 
32.
		for /f "tokens=1,2,3 delims=:	 " %%n in ('findstr /n "^" %%h.%%i') do ( 
33.
			set /a ZeileAb=!%%h_ZeileAb_%%m!+1 
34.
			set /a ZeileBis=!%%h_ZeileBis_%%m!-2 
35.
			if %%n gtr !ZeileAb! if %%n leq !ZeileBis! ( 
36.
				echo 						@%%o %%p, >> !FILENAME! 
37.
38.
39.
		echo 						@index int, >> !FILENAME! 
40.
		echo 						@return_code int=0 OUTPUT ^) AS >> !FILENAME! 
41.
		echo update !%%h_Procedurename_%%m! >> !FILENAME! 
42.
		echo SET >> !FILENAME! 
43.
 
44.
		for /f "tokens=1,2,3 delims=:	 " %%n in ('findstr /n "^" %%h.%%i') do ( 
45.
			set /a ZeileAb=!%%h_ZeileAb_%%m!+1 
46.
			set /a ZeileBis=!%%h_ZeileBis_%%m!-2 
47.
			if %%n gtr !ZeileAb! if %%n leq !ZeileBis! ( 
48.
				if not %%n equ !ZeileBis! ( 
49.
					echo 	%%o = @%%o, >> !FILENAME! 
50.
				) else ( 
51.
					echo 	%%o = @%%o >> !FILENAME! 
52.
53.
54.
		)	 
55.
		echo where id = @index >> !FILENAME! 
56.
		echo select @return_code = @@ERROR>> !FILENAME! 
57.
		echo go >> !FILENAME! 
58.
59.
)
Gibt es noch Verbesserungsbedarf?
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Bash Umgebungsvariable PATH Splitten (1)

Frage von Marabunta zum Thema Batch & Shell ...

Batch & Shell
Umgebungsvariable "PATH" für eine Anwendung anpassen (7)

Frage von enno zum Thema Batch & Shell ...

Batch & Shell
gelöst Umgebungsvariablen mit PowerShell anpassen - Problem (5)

Frage von speedy26gonzales zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit zusammengesetzter Variable auf andere Variable zugreifen (2)

Frage von abiber zum Thema Batch & Shell ...

Neue Wissensbeiträge
Microsoft Office

Text in Zahlen umwandeln

Tipp von logische zum Thema Microsoft Office ...

Erkennung und -Abwehr

Infineon TPMs unsicher! Bitlocker ggf. angreifbar

(4)

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

Firewall

PfSense Repository für Version 2.3.x

(4)

Information von Dobby zum Thema Firewall ...

LAN, WAN, Wireless

WPA-2 hat erste Risse: KRACK

(8)

Information von the-buccaneer zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Microsoft Office
ICH BIN AM ENDE MEINES IT-WISSENS ANGELANGT!!!! (38)

Frage von 134537 zum Thema Microsoft Office ...

Windows Server
gelöst Gruppenrichtlinie greift nicht zu! (23)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...