Text-Deien öffnen, ein Wort suchen und nach Bedingungsprüfung ein anderes Wort ersetzen
Hallo,
ich habe ein etwas komplexeres Problem. Das Stundenplanprogramm unserer Schule gibt die Vertretungspläne in HTML aus, damit sie dann auf einem digitalen schwarzen Brett angezeigt werden können (Dateiname: Vertretung_Datum.html). Farben usw. können über eine zusätzliche css-Datei verändert werden. Da der Übersichtlichkeit wegen jeder Tag in einer anderen Farbe gestaltet sein soll, habe ich auch schon verschieden css-Dateien erstellt. Es ist jedoch sehr mühsam, im HTML-Dokument händisch jeweils den Link zur entsprecheneden css-Datei zu ändern. In der zweiten Zeile jedes HTML-Dokuments steht die Zeile "Vertretungsplan für Mo. den ...".
Über eine Batch-Datei würde ich nun gerne diesen Textabschnitt suchen lassen und über eine "Wenn"-Abfrage den Namen der CSS-Datei austauschen lassen (z.B. Wenn "Vertretungsplan für Mo." dann href="x.css" austauschen durch href="y.css". Im Ordner liegen noch andere Dateien. Die Batchdatei sollte also nur die HTML-Dateien der Reihe nach öffnen, überprüfen, Text austauschen und die Datei wieder abspeichern.
Ich habe im Forum schon ein paar Beispiele zum Ersetzen von Text gefunden, jedoch gelingt es mir nicht, sie für meine Bedürfnisse anzupassen und vor allem mit den restlichen Anforderungen zu kombinieren. Ich kenn mich leider nur ein wenig mit Basic aus, aber die Batch-Befehle sind schon ziemlich anders. Für Hilfe und Teillösungen wäre ich sehr dankbar.
Danke und Grüße, T. Schuster
ich habe ein etwas komplexeres Problem. Das Stundenplanprogramm unserer Schule gibt die Vertretungspläne in HTML aus, damit sie dann auf einem digitalen schwarzen Brett angezeigt werden können (Dateiname: Vertretung_Datum.html). Farben usw. können über eine zusätzliche css-Datei verändert werden. Da der Übersichtlichkeit wegen jeder Tag in einer anderen Farbe gestaltet sein soll, habe ich auch schon verschieden css-Dateien erstellt. Es ist jedoch sehr mühsam, im HTML-Dokument händisch jeweils den Link zur entsprecheneden css-Datei zu ändern. In der zweiten Zeile jedes HTML-Dokuments steht die Zeile "Vertretungsplan für Mo. den ...".
Über eine Batch-Datei würde ich nun gerne diesen Textabschnitt suchen lassen und über eine "Wenn"-Abfrage den Namen der CSS-Datei austauschen lassen (z.B. Wenn "Vertretungsplan für Mo." dann href="x.css" austauschen durch href="y.css". Im Ordner liegen noch andere Dateien. Die Batchdatei sollte also nur die HTML-Dateien der Reihe nach öffnen, überprüfen, Text austauschen und die Datei wieder abspeichern.
Ich habe im Forum schon ein paar Beispiele zum Ersetzen von Text gefunden, jedoch gelingt es mir nicht, sie für meine Bedürfnisse anzupassen und vor allem mit den restlichen Anforderungen zu kombinieren. Ich kenn mich leider nur ein wenig mit Basic aus, aber die Batch-Befehle sind schon ziemlich anders. Für Hilfe und Teillösungen wäre ich sehr dankbar.
Danke und Grüße, T. Schuster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161179
Url: https://administrator.de/contentid/161179
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo schustec!
Wenn es den Verweis auf die "css"-Datei nur ein einziges Mal je HTML-Datei gibt, könntest Du es damit versuchen (ungetetstet):
Ersetzt wird der Text in %Von% durch den Text in %Nach% - daher bitte entsprechende Anpassungen in den Zeilen 4 und 17-21 vornehmen.
Bitte zunächst Testdaten verwenden, da die Änderungen (ohne Sicherungskopien) direkt in die Dateien geschrieben werden ...
Grüße
bastla
Wenn es den Verweis auf die "css"-Datei nur ein einziges Mal je HTML-Datei gibt, könntest Du es damit versuchen (ungetetstet):
@echo off & setlocal
set "Ordner=D:\Vertretungen"
set "Typ=html"
set "Von=x.css"
set R=%temp%\ReplaceIt.vbs
>%R% echo Set a=WScript.Arguments:Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2))
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d *.%Typ%') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
set "Nach="
findstr /i c:"Vertretungsplan für Mo" %1>nul && set "Nach=Mo.css"
findstr /i c:"Vertretungsplan für Di" %1>nul && set "Nach=Di.css"
findstr /i c:"Vertretungsplan für Mi" %1>nul && set "Nach=Mi.css"
findstr /i c:"Vertretungsplan für Do" %1>nul && set "Nach=Do.css"
findstr /i c:"Vertretungsplan für Fr" %1>nul && set "Nach=Fr.css"
if not defined Nach echo Nicht bearbeitet: %1 & goto :eof
cscript //nologo %R% %1 "%Von%" "%Nach%"
echo Bearbeitet: %1
goto :eof
Bitte zunächst Testdaten verwenden, da die Änderungen (ohne Sicherungskopien) direkt in die Dateien geschrieben werden ...
Grüße
bastla
moin,
Gruß
€dit
@bastla - hätte ich gesehen, dass du onthelinie bist - hätt ich mir das Geplänkel gespart
Allerdings suche ich auch nicht nach für, sondern f.r - sollte so ohne chcp und co sauberererererer laufen tun.
- Wenn "Vertretungsplan für Mo." wirklich genauso dasteht und sonst im Plan selber nur Mo oder Montag....
- Grundsätzlich würde ich das aber auch nicht machen, sondern einen intelligenten Webserver z.B mit PHP nehmen, der das css selber via script einbaut.
- Da das wahrscheinlich wieder mit Kanonen auf Spatzen geworfen ist....
- Würde ich - wenn die Dateien immer identisch aufgebaut sind - nicht mit "suchen und ersetzen" arbeiten, sondern mit
- Suchen, abschneiden und zusammenfügen.
- - suchst mit Findstr /c: "suche" nach dem Tag
- schneidest immer ab der der Zeile ab, wo der Body anfängt (prüfst idealerweise ob die Zeile body enthält)
- kopierst den Tagesbody mit dem Rest und überschreibst die ursprungsdatei.
- Probier das mal selber aus zusammen zu kombinieren - als Lehrer sollte dir das ja nicht unmöglich sein.
Gruß
€dit
@bastla - hätte ich gesehen, dass du onthelinie bist - hätt ich mir das Geplänkel gespart
Allerdings suche ich auch nicht nach für, sondern f.r - sollte so ohne chcp und co sauberererererer laufen tun.
@t-mo
Grüße
bastla
@bastla - hätte ich gesehen, dass du onthelinie bist - hätt ich mir das Geplänkel gespart
Wieso das denn? Du hast ja eine andere Herangehensweise gezeigt - damit hat schustec schon mindestens 2 Möglichkeiten mehr ...Allerdings suche ich auch nicht nach für, sondern f.r - sollte so ohne chcp und co sauberererererer laufen tun.
Ist auf jeden Fall die sicherere Variante (obwohl es vermutlich ja doch auf "ü" hinauslaufen wird ) ...Grüße
bastla
moin,
schau dir mal das "Geplänkel" zwischen bastla und mir an...
Daher probiere lieber gleich so herum:
Und zum testen bitte @echo off nicht benutzen! - das Setlocal jedoch gerne.
Gruß
schau dir mal das "Geplänkel" zwischen bastla und mir an...
- Vertretungsplan für Mo.
- Vertretungsplan für Mo.
Daher probiere lieber gleich so herum:
17. findstr /i c:"r Mo" %1>nul && set "Nach=Mo.css"
usw.Und zum testen bitte @echo off nicht benutzen! - das Setlocal jedoch gerne.
habe so schnell noch nicht mit einer Antwort gerechnet.
- eine(r) Antwort in dem Forum zum Thema Bätsch?
Gruß
Hallo Thomas,
du hast das Problem ja schon gelöst, aber zu den Klassen nochmal:
Das Vertretungsprogramm gibt immerhin schon mal die Klasse "seite" aus (hier im <p> Tag. Du kannst über css ja definieren, dass alle <p> grün sind. Über die Klasse "seite" kannst du definieren, dass eben dieses einzelne <p> z.B. rot ist. Ist aber für dein Problem nicht ausreichend...
Durchsuche mal deine html-Seite, ob noch mehr Klassennamen vergeben sind (class="xxx"), idealerweise halt mit den Wochentagen korreliert.
Vielleicht stehen die in einem <div>Tag.
Schaue auch nochmal in deinem Vertretungsprogramm, ob du da css-Klassen definieren kannst. Ich kenne das von z.B. Joomla cms und einigen Komponenten, dass du Klassennamen angeben kannst, die dann in den Quelltext eingefügt werden.
Viele Grüße
du hast das Problem ja schon gelöst, aber zu den Klassen nochmal:
Das Vertretungsprogramm gibt immerhin schon mal die Klasse "seite" aus (hier im <p> Tag. Du kannst über css ja definieren, dass alle <p> grün sind. Über die Klasse "seite" kannst du definieren, dass eben dieses einzelne <p> z.B. rot ist. Ist aber für dein Problem nicht ausreichend...
Durchsuche mal deine html-Seite, ob noch mehr Klassennamen vergeben sind (class="xxx"), idealerweise halt mit den Wochentagen korreliert.
Vielleicht stehen die in einem <div>Tag.
Schaue auch nochmal in deinem Vertretungsprogramm, ob du da css-Klassen definieren kannst. Ich kenne das von z.B. Joomla cms und einigen Komponenten, dass du Klassennamen angeben kannst, die dann in den Quelltext eingefügt werden.
Viele Grüße
Hallo Thomas,
vielleicht gehts ja doch?
Du kannst ja in deiner css-Datei definieren, dass die Tabellenköpfe z.B. grüne Schrift auf gelbem Grund haben sollen.
In der css steht dann
th {
color: green;
background-color: yellow;
}
Dann sind alle Tabellenüberschriftszeilen (was'n Wort) gelb. Du hast also das generelle Erscheinungsbild definiert.
Jetzt hast du aber eine bestimmte Tabelle, in der du schwarze Schrift auf grauem Grund in der Überschriftszeile stehen haben willst. Das definierst du dann mit den Klassen. html muss ja wissen, dass eine Tabellenüberschrift ausgegeben werden soll, also muss das <th> hin. Aber nur so ist das ja gelb. Also kommt die Klasse dazu: <th class="k">
In der CSS definierst du dann diese Klasse:
.k {
color: black;
background-color: silver;
}
Jetzt werden alle Tabellenüberschriften, die zusätzlich die Klassenangabe haben grau mit schwarzer Schrift angezeigt. Alle Tabellenüberschriften, die keine oder eine andere Klassenangabe haben eben gelb mit grüner Schrift (bzw. in der anderen Klassendefinition) angezeigt.
Wenn jetzt jeder ausgegebene Wochentag in deinem html Dokument eine eigene Klasse zugewiesen bekommt, dann kannst du alles in einer einzelnen Datei definieren und brauchst nichts über batches ersetzen.
Ob das jetzt die Überschriften sind oder ob vielleicht eine Klassenangabe in dem <table>-Tag des jeweiligen Schultages stehen oder ein <div> um jeden Wochentag gebaut ist musst du mal schauen. Es muss halt für jeden Tag eine eigene Klasse geben.
In der css definierst du die Klasse mit einem Punkt, dann Klassenname, dann die geschwungenen Klammern. In die Klammer kommen untereinander die Formatierungsangeben, jeweils schön mit einem Semikolon abgeschlossen(wichtig)
Schau mal nach. Vielleicht hast du ja Glück.
Grüße
vielleicht gehts ja doch?
Du kannst ja in deiner css-Datei definieren, dass die Tabellenköpfe z.B. grüne Schrift auf gelbem Grund haben sollen.
In der css steht dann
th {
color: green;
background-color: yellow;
}
Dann sind alle Tabellenüberschriftszeilen (was'n Wort) gelb. Du hast also das generelle Erscheinungsbild definiert.
Jetzt hast du aber eine bestimmte Tabelle, in der du schwarze Schrift auf grauem Grund in der Überschriftszeile stehen haben willst. Das definierst du dann mit den Klassen. html muss ja wissen, dass eine Tabellenüberschrift ausgegeben werden soll, also muss das <th> hin. Aber nur so ist das ja gelb. Also kommt die Klasse dazu: <th class="k">
In der CSS definierst du dann diese Klasse:
.k {
color: black;
background-color: silver;
}
Jetzt werden alle Tabellenüberschriften, die zusätzlich die Klassenangabe haben grau mit schwarzer Schrift angezeigt. Alle Tabellenüberschriften, die keine oder eine andere Klassenangabe haben eben gelb mit grüner Schrift (bzw. in der anderen Klassendefinition) angezeigt.
Wenn jetzt jeder ausgegebene Wochentag in deinem html Dokument eine eigene Klasse zugewiesen bekommt, dann kannst du alles in einer einzelnen Datei definieren und brauchst nichts über batches ersetzen.
Ob das jetzt die Überschriften sind oder ob vielleicht eine Klassenangabe in dem <table>-Tag des jeweiligen Schultages stehen oder ein <div> um jeden Wochentag gebaut ist musst du mal schauen. Es muss halt für jeden Tag eine eigene Klasse geben.
In der css definierst du die Klasse mit einem Punkt, dann Klassenname, dann die geschwungenen Klammern. In die Klammer kommen untereinander die Formatierungsangeben, jeweils schön mit einem Semikolon abgeschlossen(wichtig)
Schau mal nach. Vielleicht hast du ja Glück.
Grüße
Hi Thomas,
das mit der Tabellenzeilenhöhe ist richtig. Jeder Browser hat seine default-Werte. Du kannst aber jedes tag für dich passend definieren. Das machst du im css einfach mit der Angabe des tags und dann der Definition in den geschweiften Klammern. Das gilt dann fürs ganze Dokument.
Und wenn du Klassen einsetzt, kannst du an gezielten Stellen abweichende Definitionen erstellen.
Wenn es ein Klasse gäbe, die "montag" heisst und z.B. notiert wäre; <table class="montag">, dann bekommt die ganze Montagstabelle eben deine eigene Definition/Formatierung ab.
Angenommen du definierst in der css-Datei:
.montag {
background-color: yellow;
}
bekommt die Tabelle <table class="montag"> einen gelben Hintergrund.
<tr class="montag"> sorgt dafür, dass nur diese Tabellenzeile den gelben Hintergrund hat.
<p class="montag"> versorgt diesen Absatz mit gelbem Hintergrund.
Eine weitere Klasse (in der selben css-Datei definiert) könnte dann sein:
.dienstag {
background-color: green;
}
Die Tabelle <table class="dienstag"> ist dann eben grün hinterlegt.
Das "wenn" von oben bezieht sich auf das Vertetungsprogramm. Irgendwer (oder -was) muss ja an den richtigen Stellen den Klassennamen hinschreiben. Und wenn das Vertretungsprogramm das irgendwie anbietet, kannst du css schön einsetzen (z.B. auch die Tabellenzeilehöhe definieren; oder den Abstand vom Text zur Linie; oder oder oder). Aber das ist halt die Voraussetzung/Einschränkung, dass das Vertretungsprogramm das macht...
Viel Erfolg
LG Jörg
das mit der Tabellenzeilenhöhe ist richtig. Jeder Browser hat seine default-Werte. Du kannst aber jedes tag für dich passend definieren. Das machst du im css einfach mit der Angabe des tags und dann der Definition in den geschweiften Klammern. Das gilt dann fürs ganze Dokument.
Und wenn du Klassen einsetzt, kannst du an gezielten Stellen abweichende Definitionen erstellen.
Wenn es ein Klasse gäbe, die "montag" heisst und z.B. notiert wäre; <table class="montag">, dann bekommt die ganze Montagstabelle eben deine eigene Definition/Formatierung ab.
Angenommen du definierst in der css-Datei:
.montag {
background-color: yellow;
}
bekommt die Tabelle <table class="montag"> einen gelben Hintergrund.
<tr class="montag"> sorgt dafür, dass nur diese Tabellenzeile den gelben Hintergrund hat.
<p class="montag"> versorgt diesen Absatz mit gelbem Hintergrund.
Eine weitere Klasse (in der selben css-Datei definiert) könnte dann sein:
.dienstag {
background-color: green;
}
Die Tabelle <table class="dienstag"> ist dann eben grün hinterlegt.
Das "wenn" von oben bezieht sich auf das Vertetungsprogramm. Irgendwer (oder -was) muss ja an den richtigen Stellen den Klassennamen hinschreiben. Und wenn das Vertretungsprogramm das irgendwie anbietet, kannst du css schön einsetzen (z.B. auch die Tabellenzeilehöhe definieren; oder den Abstand vom Text zur Linie; oder oder oder). Aber das ist halt die Voraussetzung/Einschränkung, dass das Vertretungsprogramm das macht...
Viel Erfolg
LG Jörg