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

Mittels Batch verschiedene Textabschnitte extrahieren und daraus eine neue Datei aufbauen

Frage Entwicklung Batch & Shell

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

30.11.2010 um 09:42 Uhr, 2837 Aufrufe, 2 Kommentare

Guten Tag!

Hallo,

ich habe folgende Problemstellung.

Ich möchte mittels Batch aus verschiedenen SQL CREATE TABLE Aufrufen endsprechende StoredProcedures generieren.

Aus dem Ihnalt meiner Beispieldatei "Meine_Tabellen.SQL",

01.
CREATE TABLE Meine_SpeedList ( 
02.
	id int IDENTITY(1,1) NOT NULL, 
03.
	identifier varchar(80) NULL, 
04.
	speed int DEFAULT 0 NULL, 
05.
	listId int NULL 
06.
07.
08.
 
09.
CREATE TABLE Meine_SpeedList 2 ( 
10.
	id int IDENTITY(1,1) NOT NULL, 
11.
	identifier varchar(80) NULL, 
12.
	speed int DEFAULT 0 NULL, 
13.
	listId int NULL 
14.
15.
;
sollen zwei Dateien entstehen deren Name sich aus dem Namen der jeweiligen Tabelle zusammensetzt. Z.B. "update_Meine_SpeedList.sql"
Ihr Ihnalt soll folgendermaßen aussehen:

01.
CREATE PROCEDURE update_Meine_SpeedList ( 
02.
	@identifier varchar(80), 
03.
	@speed int, 
04.
	@listId int, 
05.
	@index int, 
06.
	@return_code int=0 OUTPUT ) AS 
07.
update Meine_SpeedList 
08.
SET 
09.
	identifier = @identifier, 
10.
	speed = @speed, 
11.
	listId = @listId, 
12.
where id = @index 
13.
select @return_code = @@ERROR 
14.
go 
15.
 
16.
// gleiches für update_Meine_SpeedList2
Einen Teil meinses Problems konnte ich bereits mittels

01.
@echo off  
02.
setlocal enabledelayedexpansion 
03.
 
04.
set ORDNERNAME=NeuerOrdner 
05.
 
06.
for /f "delims=" %%i in ('dir /a:-d /b *.SQL') do (	 
07.
	for /f "tokens=3" %%j in ('findstr /C:"CREATE TABLE" %%i') do ( 
08.
		if exist %ORDNERNAME%\update_%%j.sql del %ORDNERNAME%\update_%%j.sql 
09.
		echo CREATE PROCEDURE update_%%j ( >> %ORDNERNAME%\update_%%j.sql 
10.
		echo update %%j >> %ORDNERNAME%\update_%%j.sql 
11.
		echo SET >> %ORDNERNAME%\update_%%j.sql 
12.
13.
)
lösen. Wie ihr seht, fehlt mir noch einiges wie z.B. das extrahieren der einzeilen Parameter identifier, speed etc.

Kann mir vielleicht jemand auf die Sprünge helfen?

Danke und einen schönen, wenn auch kalten, Tag!
Mitglied: Mario.Steinberg
30.11.2010 um 13:02 Uhr
Hallo,

ich habe ein Beispiel im Forum gefunden und nun auch die erste und letzte Zeile des CREATE TABLE Aufrufes.

01.
@echo off  
02.
setlocal enabledelayedexpansion 
03.
 
04.
set ORDNERNAME=NeuerOrdner 
05.
 
06.
for /f "delims=" %%i in ('dir /a:-d /b *.SQL') do (	 
07.
	set /a counter=1 
08.
	for /f "delims=:" %%j in ('findstr /n /c:"CREATE TABLE" %%i') do ( 
09.
		set %%i_ZeileAb[!counter!]=%%j  
10.
		set /a counter=!counter! + 1 
11.
12.
	 
13.
	set /a counter=1 
14.
	for /f "delims=:" %%k in ('findstr /n /c:";" %%i') do ( 
15.
		if %%k gtr !%%i_ZeileAb[!!counter!!]! ( 
16.
			set %%i_ZeileBis[!counter!]=%%k 
17.
		) else ( 
18.
			echo Fehler in %%i Zeile %%k 
19.
			goto END 
20.
21.
		set /a counter=!counter! + 1 
22.
23.
 
24.
	REM PLATZHALTER 23 
25.
26.
set create 
27.
:END 
28.
pause
hier mal die Ausgaben:

01.
create.SQL_ZeileAb[1]=1 
02.
create.SQL_ZeileAb[2]=11 
03.
create.SQL_ZeileBis[1]=9 
04.
create.SQL_ZeileBis[2]=19 
05.
create2.SQL_ZeileAb[1]=1 
06.
create2.SQL_ZeileAb[2]=11 
07.
create2.SQL_ZeileBis[1]=9 
08.
create2.SQL_ZeileBis[2]=19
Nun bin ich auf ein weiters Problem gestoßen.
Im Code bei PLATZHALTER 23 habe ich, angelehnt an die For-Schleife darüber, folgenden Code eingefügt:

<code>
set /a counter=1
for /f "tokens=3" %%l in ('findstr /C:"CREATE TABLE" %%i') do (
set %%i_Filename[!counter!]=%ORDNERNAME%\update_%%l.sql
echo !%%i_Filename[!!counter!!]!
set /a counter=!counter! + 1
)
<code>

Wenn ich mir mittels set die Umgebungswariablen anschaue kann ich u.a. folgendes finden:

create.SQL_Filename[1]=NeuerOrdner\update_AWUSME_SpeedRPMRtList.sql

Allerdings erhalte ich mittels echo !%%i_Filename[!!counter!!]! nicht wie erwartet NeuerOrdner\update_AWUSME_SpeedRPMRtList.sql sondern lediglich eine Zahl, hier z.B. 1
WO LIEGT MEIN PROBLEM ?

Wenn alles so klappt wie geplant sollte es doch jetzt möglich sein die Inhalte zwischen den jeweiligen Zeilennummern zu extrahieren und in die gewünschte Form zu gießen, oder?

Danke und Gruß!
Bitte warten ..
Mitglied: Mario.Steinberg
01.12.2010 um 13:22 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
Bash Script soll neue Datei erzeugen (2)

Frage von SpeakerST zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...