ECHO ist ausgeschaltet (OFF)
Hallo,
ich habe folgendes Problem, ich möchte eine Zeile komplett aus einer text datei löschen
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.
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
ich habe folgendes Problem, ich möchte eine Zeile komplett aus einer text datei löschen
@echo off &setlocal enabledelayedexpansion
set "Von1=CONNECT TO admin IN EXCLUSIVE MODE;"
set "Nach1="
for /f "usebackq delims=" %%i in ("%t%") do (
set "Line=%%i"
set "Line=!Line:%Von1%=%Nach1%!" & >>"%s%" echo !Line!
)
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.
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 214259
Url: https://administrator.de/contentid/214259
Ausgedruckt am: 26.11.2024 um 17:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo,
ich kann das Szenario gerade nicht nachstellen, aber ich Vermute, dass der fehler im Bereich von
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.
Dort siehst du dann, das "leere"-echo gibt deinen Fehler aus.
Viele Grüße.
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.
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
ließe sich auch der beheben..
Grüße
bastla
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
Grüße
bastla
Hallo Balegor!
Bevor wir uns noch lange mit diesem Batch herumplagen, lieber die VBS-Variante:
Grüße
bastla
Bevor wir uns noch lange mit diesem Batch herumplagen, lieber die VBS-Variante:
Datei = "create1.txt"
Liste = "Ersetzungsliste.txt"
s = "create4.txt"
Delim = ","
Set fso = CreateObject("Scripting.FileSystemObject")
Ersetzungen = Split(fso.OpenTextFile(Liste).ReadAll, vbNewline)
Inhalt = fso.OpenTextFile(Datei).ReadAll
For Each Ersetzung In Ersetzungen
If Trim(Ersetzung) <> "" Then Inhalt = Replace(Inhalt, Split(Ersetzung, Delim)(0), Split(Ersetzung, Delim)(1))
Next
fso.CreateTextFile(s).Write Inhalt
bastla
Hallo Balegor!
Füge zum Testen zwischen Zeile 10 und 11 noch
ein und starte das Script aus der CMD-Shell mit
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
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 & "===================="
cscript //nologo "DeinScript.vbs"
Grüße
bastla
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?"
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
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
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.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 ^^
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