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

Zusammengesetzte Umgebungsvariable im Batchfile

Frage Entwicklung Batch & Shell

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

01.12.2010 um 08:44 Uhr, 3885 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Änderung Umgebungsvariable per GPO (4)

Frage von Coreknabe zum Thema Windows Server ...

Windows Netzwerk
gelöst Java über Gruppenrichtlinie - Umgebungsvariable PATH erweitern (4)

Frage von Juckie zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...