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

ECHO ist ausgeschaltet (OFF)

Frage Entwicklung Batch & Shell

Mitglied: Balegor

Balegor (Level 1) - Jetzt verbinden

14.08.2013 um 09:15 Uhr, 3415 Aufrufe, 18 Kommentare, 5 Danke

Hallo,
ich habe folgendes Problem, ich möchte eine Zeile komplett aus einer text datei löschen

01.
@echo off &setlocal enabledelayedexpansion 
02.
 
03.
set "Von1=CONNECT TO admin IN EXCLUSIVE MODE;"  
04.
set "Nach1=" 
05.
 
06.
for /f "usebackq delims=" %%i in ("%t%") do (  
07.
   set "Line=%%i"  
08.
   set "Line=!Line:%Von1%=%Nach1%!" & >>"%s%" echo !Line! 
09.
)
allerdings bekomme ich dann in der Ausgabedatei
anstelle der gelöschten Zeile: ECHO ist ausgeschaltet (OFF). (wo eigentlich nichts mehr stehen sollte)
So nun zu meiner Frage, wie bekomme ich das weg so das da wircklich eine leere Zeile bzw. die Zeile einfach ganz gelöscht ist hin (je nachdem was einfacher ist )?

Und dann hab ich noch eine Frage, ich suche nach einem bestimmten String und möchte dann alles was bis zu einem andern String steht löschen, egal was dazwischen steht, und es durch einen anderen String ersetzen z.B.

01.
CREATE UNIQUE INDEX nation_name_idx ON nation(n_name) INCLUDE(n_regionkey);
ab INCLUDE bis zum ; soll alles durch ein ; ersetzt werden. Es soll also egal sein was zwischen INCLUDE und dem ; steht (da sich das ab und zu ändert).

Grüße,
Balegor
Mitglied: bastla
14.08.2013, aktualisiert um 09:29 Uhr
Hallo Balegor!

Etwa so:
set "Line=!Line:%Von1%=%Nach1%!" & >>"%s%" echo(!Line!
wobei sich das (wenn Du nur ausgeben und sonst nix mehr mit der veränderten Zeile anstellen willst) noch auf
>>"%s%" echo(!Line:%Von1%=%Nach1%!
verkürzen lassen sollte ...

Grüße
bastla
Bitte warten ..
Mitglied: Pope35i
14.08.2013, aktualisiert um 09:31 Uhr
Hallo,
ich kann das Szenario gerade nicht nachstellen, aber ich Vermute, dass der fehler im Bereich von

& >>"%s%" echo !Line! 
liegt.

Wahrscheinlich ist !Line! leer und er gibt ein echo leer aus.

Bsp.: Kopiere dies in eine .bat bat datei und führe sie aus.

@echo off  
echo test 
echo 
pause
Dort siehst du dann, das "leere"-echo gibt deinen Fehler aus.

Viele Grüße.
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 11:50 Uhr
danke @bastla, tatsächlich hat nur die eine klammer auf nach dem echo bei mir gefehlt.
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 18:08 Uhr
ich hab hier im forum folgende .bat gefunden, die eine Datei für die Ersetztungen ausliest

01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=D:\Test.txt" 
03.
set "Liste=D:\Ersetzungsliste.txt" 
04.
 
05.
set "t=%temp%\text.tmp" 
06.
if exist "%t%" del "%t%" 
07.
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine 
08.
move "%t%" "%Datei%" 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" 
13.
if not defined L >>"%t%" echo\& goto :eof 
14.
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set "L=!L:%%s=%%t!" 
15.
>>"%t%" echo %L% 
16.
goto :eof
die hab ich per copy paste einfach so übernommen und meine Dateinamen angepasst (und das Trennzeichen in Zeile 14), jetzt spuckt er mir nach dem move in Zeile 8 aber nen Faehler aus "Das System kann die angegebene Datei nicht finden". Kann mir jmd sagen wo der Fehler liegt?
hier nochmal meine geänderte .bat

01.
@echo on & setlocal enabledelayedexpansion 
02.
 
03.
set "Datei=create.txt" 
04.
set "Liste=Ersetzungsliste.txt" 
05.
set "t=%temp%\text.tmp" 
06.
if exist "%t%" del "%t%" 
07.
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine 
08.
move "%t%" "%Datei%" 
09.
goto :eof  
10.
 
11.
pause 
12.
:ProcessLine 
13.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" 
14.
if not defined L >>"%t%" echo\& goto :eof 
15.
for /f "usebackq tokens=1-2 delims=," %%s in ("%Liste%") do set "L=!L:%%s=%%t!" 
16.
>>"%t%" echo %L% 
17.
goto :eof  
18.
 
19.
pause
und hier meine ersetztungsliste:
01.
@,; 
02.
CONNECT TO admin IN EXCLUSIVE MODE,
und ein schnipsel der create.txt

01.
CREATE DATABASE admin@ 
02.
CONNECT TO admin IN EXCLUSIVE MODE@ 
03.
 
04.
CREATE TABLE region ( 
05.
   r_regionkey  INTEGER  NOT NULL, 
06.
   r_name       CHAR(25), 
07.
   r_comment    VARCHAR(152), 
08.
 
09.
   CONSTRAINT region_pk PRIMARY KEY(r_regionkey) 
10.
)@
Bitte warten ..
Mitglied: bastla
14.08.2013 um 19:00 Uhr
Hallo Balegor!

Bis auf die Tatsache, dass nur Zeilen, die mit einer Zeilenschaltung enden, verarbeitet werden (und damit Deine letzte Zeile aus der "create.txt") auf der Strecke bleibt), kann ich eigentlich keinen Fehler finden ...

... und mit
for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do set "Line=%%i" & call :ProcessLine
ließe sich auch der beheben..

Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 19:22 Uhr
hab das besagte geändert und die text.tmp in eine test.txt umgewandelt

01.
@echo on & setlocal enabledelayedexpansion 
02.
 
03.
set "Datei=create.txt" 
04.
set "Liste=Ersetzungsliste.txt" 
05.
set "t=test.txt" 
06.
if exist "%t%" del "%t%" 
07.
for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do set "Line=%%i" & call :ProcessLine 
08.
move "%t%" "%Datei%" 
09.
goto :eof   
10.
 
11.
pause 
12.
:ProcessLine 
13.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" 
14.
if not defined L >>"%t%" echo\& goto :eof 
15.
for /f "usebackq tokens=1-2 delims=," %%s in ("%Liste%") do set "L=!L:%%s=%%t!" 
16.
>>"%t%" echo %L% 
17.
 goto :eof   
18.
 
19.
pause
an der create.txt ändert sich gar nichts und in der test.txt steht nur

01.
CREATE DATABASE admin;
Bitte warten ..
Mitglied: bastla
14.08.2013 um 19:43 Uhr
Hallo Balegor!

Ich kann mich ja nur an Deinen geposteten Daten orientieren - und damit klappt's ...

BTW: Die beiden Zeilen mit "pause" hätten nur jeweils vor dem "goto :eof" Sinn - dort, wo sie jetzt sind, werden sie nie erreicht.

Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013, aktualisiert um 20:16 Uhr
ich hab jetzt noch ein bisschen rumprobiert und hab jetzt folgende Ausgangsdatei create1.txt (Auszug):

01.
 CREATE DATABASE admin;  
02.
 CONNECT TO admin IN EXCLUSIVE MODE;  
03.
 CREATE TABLE region (  
04.
    r_regionkey  INTEGER  NOT NULL,  
05.
    r_name       CHAR(25),  
06.
    r_comment    VARCHAR(152),  
07.
    CONSTRAINT region_pk PRIMARY KEY(r_regionkey)  
08.
 );  
09.
  
10.
 LOAD FROM /home/db2prak/admprak/db2i00/sample-db/region.tbl OF DEL  
11.
    MODIFIED BY coldel|  
12.
    REPLACE INTO region  
13.
    STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL  
14.
    COPY NO  
15.
    CPU_PARALLELISM 4  
16.
    INDEXING MODE REBUILD;  
17.
 LOAD FROM /home/db2prak/admprak/db2i00/sample-db/nation.tbl OF DEL  
18.
    MODIFIED BY coldel|  
19.
    REPLACE INTO nation  
20.
    STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL  
21.
    COPY NO  
22.
    CPU_PARALLELISM 4  
23.
    INDEXING MODE REBUILD; 
folgende Ersetzungsliste.txt
01.
CONNECT TO admin IN EXCLUSIVE MODE;, 
02.
 INCLUDE(n_regionkey), 
03.
LOAD FROM,COPY
und folgende .bat
01.
@echo on & setlocal enabledelayedexpansion 
02.
 
03.
set "Datei=create1.txt" 
04.
set "Liste=Ersetzungsliste.txt" 
05.
set "s=create4.txt" 
06.
if exist "%s%" del "%s%"  
07.
for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do set "Line=%%i" & call :ProcessLine 
08.
move "%s%" "create4.sql" 
09.
goto :eof  
10.
 
11.
 
12.
:ProcessLine 
13.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" 
14.
if not defined L >>"%s%" echo\& goto :eof 
15.
for /f "usebackq tokens=1-2 delims=," %%q in ("%Liste%") do set "L=!L:%%q=%%s!" 
16.
>>"%s%" echo( %L% 
17.
 goto :eof  
18.
 
und hab jetzt folgendes Problem, er tut das 2te LOAD FROM nicht ersetzten bzw schmeißt nach dem ersten
01.
LOAD FROM /home/db2prak/admprak/db2i00/sample-db/region.tbl OF DEL
alles weg und er schreibt mir bei jeder Ersetztung ein %s in die create4.txt

EDIT: so sieht meine create4.txt dann aus:
01.
  CREATE DATABASE admin;  
02.
  %s  
03.
  CREATE TABLE region (  
04.
     r_regionkey  INTEGER  NOT NULL,  
05.
     r_name       CHAR(25),  
06.
     r_comment    VARCHAR(152),  
07.
     CONSTRAINT region_pk PRIMARY KEY(r_regionkey)  
08.
  );  
09.
   
10.
  %s /home/db2prak/admprak/db2i00/sample-db/region.tbl OF DEL 
Bitte warten ..
Mitglied: bastla
14.08.2013 um 20:47 Uhr
Hallo Balegor!

Bevor wir uns noch lange mit diesem Batch herumplagen, lieber die VBS-Variante:
01.
Datei = "create1.txt" 
02.
Liste = "Ersetzungsliste.txt" 
03.
s = "create4.txt" 
04.
Delim = "," 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Ersetzungen = Split(fso.OpenTextFile(Liste).ReadAll, vbNewline) 
08.
Inhalt = fso.OpenTextFile(Datei).ReadAll 
09.
 
10.
For Each Ersetzung In Ersetzungen 
11.
    If Trim(Ersetzung) <> "" Then Inhalt = Replace(Inhalt, Split(Ersetzung, Delim)(0), Split(Ersetzung, Delim)(1)) 
12.
Next 
13.
 
14.
fso.CreateTextFile(s).Write Inhalt
Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 21:23 Uhr
hmm, ich bin kompletter neuling was skript sachen angeht, hab jetzt halt versucht mich bissl mit .bat zu beschäftigen (was wohl ne schlecht wahl war^^)
von .vbs hab ich halt jetzt gar keine ahnung.
hab mir jetzt ne .vbs mit dem inhalt erstellt und die macht genau nichts. kp was ich falsch mache und ich glaub nicht das du lust und zeit hast mir hier jede kleinigkeit hinzubiegen
Bitte warten ..
Mitglied: bastla
14.08.2013 um 21:38 Uhr
Hallo Balegor!
mit .bat zu beschäftigen (was wohl ne schlecht wahl war^^)
Würde ich nicht so pauschal stehen lassen - Suchen/Ersetzen ist aber nicht unbedingt eine Stärke von Batch.
hab mir jetzt ne .vbs mit dem inhalt erstellt und die macht genau nichts.
Schwer vorstellbar (auch, da von mir mit den von Dir geposteten Beispieldateien getestet); zumindest eine "create4.txt" müsste erstellt werden (und wenn sie auch den genau gleichen Inhalt wie "create1.txt" haben sollte).

Füge zum Testen zwischen Zeile 10 und 11 noch
WScript.Echo Ersetzung & vbNewline & "===================="
ein und starte das Script aus der CMD-Shell mit
cscript //nologo "DeinScript.vbs"
Es müssten jetzt die einzelnen Zeilen aus der "Ersetzungsliste.txt", getrennt durch "
", ausgegeben werden - wenn nicht, könnte ich mir das nur damit erklären, dass Du "Nicht-Windows-Zeilenschaltungen" (CR + LF) in der Datei hast, oder dass die Textdateien in Unicode vorlägen ...

Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 22:09 Uhr
ja, macht jetzt was es soll, kp was vorhin schief lief und das mit der trennlinie hat auch geklappt. das einzige problem was ich jetzt noch habe ist, das ich ja vorher mit der. bat schon bissl an der ausgangsdatei rumgebastelt hab und ich keine idee hab wie ich das mit vbs jetzt "nachbatseln kann"
Bitte warten ..
Mitglied: bastla
14.08.2013 um 22:15 Uhr
Hallo Balegor!

Du kannst sämtliche benötigten Ersetzungen in die "Ersetzungsliste.txt" eintragen (Achtung: Groß-/Kleinschreibung werden berücksichtigt) und das Script damit laufen lassen - oder die schon teilweise aufbereitete Datei als Ausgangspunkt in Zeile 1 eintragen.

Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 22:28 Uhr
eine frage hätte ich noch, da ich das ganze doch nur mit einem skript machen wollen würde, da ich das ganze ja auch irgentwie meinem betreuer erklären muss, warum ich jetzt aufeinmal mit 2 skripten rumgespielt hab ^^

wie kann ich ab einem bestimmten string den rest der datei löschen?
also ich hab irgentwo in der datei stehen: -- bis hier her
und ab da soll der rest der datei (inklusive das strings gelöscht werden)
Bitte warten ..
Mitglied: bastla
14.08.2013 um 22:35 Uhr
Hallo Balegor!

Ändere die letzte Zeile auf
fso.CreateTextFile(s).Write Split(Inhalt, "--  bis hier her")(0)
Grüße
bastla
Bitte warten ..
Mitglied: Balegor
14.08.2013 um 22:54 Uhr
oh man vielen herzlichen dank, ich glaub ohne dich hätte ich hier kein land gesehen
Bitte warten ..
Mitglied: Biber
14.08.2013, aktualisiert um 23:21 Uhr
Moin Balegor,

ich weiss nicht, ob dir bewusst ist, wie oft du hier die Ebenen der Fragestellung wechselst - das macht es nicht einfacher, dir wirklich zu helfen.

Angefangen hast du mit einer "ECHO ist eingeschaltet"-Meldung, die dich unerwartet traf.
Diese Frage ist seit 50 Beitragszentimetern hinreichend beantwortet.

Nächster Abschnitt war ein String-Ersetzen per Batch - was machbar ist, aber wobei Batch nicht unbedingt das beste Werkzeug darstellt.

Das wäre auch die Antwort auf die Frage der Phase 3 aka "Wie erklär ich das dem Cheffe?"

Zitat von Balegor:
eine frage hätte ich noch, da ich das ganze doch nur mit einem skript machen wollen würde, da ich das ganze ja auch
irgentwie meinem betreuer erklären muss, warum ich jetzt aufeinmal mit 2 skripten rumgespielt hab ^^
Antwort: Weil die Aufgabe das Hauptanliegen ist, die Wahl des Werkzeugs ist untergeordnet.

Ich fürchte allerdings,, wir kommen bald zu Phase 4, nämlich die Frage, ob die Strategie deines DDL-Generators so ganz der richtige Weg ist.

Klar sehen sich alle 78 Tabellenobjekte in einer Datenbank irgendwie ähnlich.
Klar könnte es eine Strategie sein, nur eine Tabelle manuell zu definieren und danach die Tabellen 2 bis 78 per Copy&Paste und anschliessendem Ersetzen von Feld- und Constraintnamen abzuleiten.

Allerdings arbeiten die meisten der 3 Millionen inzwischen zusammengeschroteten SQL-Generatoren ein bisschen anders - zum Beispiel mit "festen" Template-Texten, in denen "variable Platzhalter" wie @ dbname, @ colname, @ Pkname aus Parameterdateien dazugemischt werden.

Diese gängige Variante hat sich irgendwie mehr durchgesetzt in freier Wildbahn.
Bist du sicher, dass du mit deiner Strategie wirklich alle Datenbankobjekte ohne Verrenkungen und vor allem ohne ständige Codeanpassungen hinbekommen kannst?

Ich meine, wir haben uns hier im Forum schon mehrfach ausschliesslich mit der Beantwortung der rein handwerklichen Problematik begnügt, weil der Fragesteller es bewusst darauf reduzierte.

Aber vielleicht magst du ja auch mal kurz die ganze Frage hier stellen und wir können dann nach einer Lösung suchen.

Grüße
Biber
Bitte warten ..
Mitglied: Balegor
15.08.2013, aktualisiert um 00:37 Uhr
die aufgabe war einfach nur eine create.sql die für db2 gedacht war so umzubasteln das man sie mit postgresql nutzen kann.
da postgresql nicht mit lob´s zurechtkommt (wurde mir zumindest so gesagt), war der schnitt in der datei und der rest war nur noch suchen und ersetzen
aber da ich vorher noch nie irgentwelche skripte angefasst hab, war das nicht ganz so einfach für mich
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Echo in Batch schreibt vorab eine 1 (1)

Frage von chappy72 zum Thema Batch & Shell ...

Sonstige Systeme
Amazons Echo im Test: Beim Dankesagen ertappt (4)

Link von Frank zum Thema Sonstige Systeme ...

Peripheriegeräte
Mouse cursor disappears when my refrigerator turns off (1)

Link von Lochkartenstanzer zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...