Top-Themen

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

Frage Entwicklung Batch & Shell

GELÖST

Mittels Batch verschiedene Textabschnitte extrahieren und daraus eine neue Datei aufbauen

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

30.11.2010 um 09:42 Uhr, 2896 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
Eine Batch zum Sortieren verschiedener Dateien in Ordner
gelöst Frage von JaglagBatch & Shell16 Kommentare

Hallo, da ich leider mit Batch und shell nicht so erfahren bin hoffe das ein findiger User hier weiterhelfen ...

Batch & Shell
Neueste Datei mit Batch suchen
gelöst Frage von thilo-55Batch & Shell4 Kommentare

Ein herzliches Hallo an die Teilnehmer des Forums. Leider komme ich mit meinen batch/dos-Kenntnissen nicht mehr weiter. Evtl. kann ...

Windows Server
Aufbau neuer Standort
Frage von KillerPinockelWindows Server13 Kommentare

Hey, ich habe ein Problem und leider keinen Anhaltspunkt. Erstmal zur "Ausstattung". Windows Server 2008 inkl. DC, AD inkl ...

Windows Netzwerk
Netzwerkshare neu aufbauen
Frage von Kaka81Windows Netzwerk4 Kommentare

Hallo liebe Gemeinde, Ich habe folgendes Problem: Bei mir in der Firma gibt es derzeit leider nur ein riesiges ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Windows Server
DNS Forwarding an andere Domäne
Frage von detox91Windows Server9 Kommentare

Hallo, für Testzwecke haben wir bei uns eine zweite Windows Domäne (B.local) aufgebaut, welche komplett unabhängig und isoliert der ...