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, 3939 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 ...

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

Frage von Coreknabe zum Thema Windows Server ...

Neue Wissensbeiträge
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(2)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (36)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Windows 10
Windows Store Apps ohne Windows Store installieren (10)

Frage von keefien zum Thema Windows 10 ...

Internet Domänen
Nameserver ein Geist? (9)

Frage von zelamedia zum Thema Internet Domänen ...