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, 2861 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch - IF - mehr als eine Datei eines bestimmten Typs (9)

Frage von zimbosmurf zum Thema Batch & Shell ...

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

Frage von SpeakerST zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(38)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
POS Hardware und alternativen zu Raid 1? (21)

Frage von Brotkasten zum Thema Festplatten, SSD, Raid ...

Viren und Trojaner
Verschlüsselungstrojaner simulieren (18)

Frage von AlbertMinrich zum Thema Viren und Trojaner ...

Ubuntu
Nextcloud 12 Antivirus App for Files (8)

Frage von horstvogel zum Thema Ubuntu ...

Server-Hardware
gelöst Empfehlung KVM over IP Switch (8)

Frage von Androxin zum Thema Server-Hardware ...