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

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, 2878 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 Eine Batch zum Sortieren verschiedener Dateien in Ordner (16)

Frage von Jaglag zum Thema Batch & Shell ...

Windows 10
PDF Dateien, Bilder extrahieren ! Welche Software? (7)

Frage von Botpenner zum Thema Windows 10 ...

Batch & Shell
Neuere Datei per Batch ausfinding machen (2)

Frage von chattie zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Zip extrahieren (2)

Frage von Marabunta zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Server
Bilder aus dem Web mit CSV runterladen (30)

Frage von Yannosch zum Thema Server ...

Windows Update
WSUS 4 (Server 2012 R2) - Windows 10 Updates nicht möglich (12)

Frage von c0d3.r3d zum Thema Windows Update ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...