beatzler
Goto Top

Aus .txt bei bestimmtem Wort eine .bat starten

Hallo,

ich bin der neue Hier face-smile Hoffe auf eine tolle Zeit hier bei / mit euch !

Zu meinem aktuellen Problem, zudem ich leider in der Suche und bei google noch keine Lösung gefunden habe,

Ich möchte gerne eine Batch haben welche ein .txt file auf bestimmte Stichwörter kontrolliert.

Ist z.B. in diesem .txt file irgendwo das Wort TESTWORT vorhanden soll eine bestimmte, weitere Batch datei gestartet werden, Ist in dem .txt das Wort TESTWORT2 vorhanden soll eine andere batch gestartet werden usw.

ich komm da einfach nicht weiter, wie ist das am besten möglich ?

weiterhin bin ich noch auf der Suche wie ich bestimmte Sonderzeichen mittels batch aus .txt datein herrauslöschen kann.... mit Worten funktioniert das super aber möchte ich in einem textfile z.B. überall mittels batch den * aus dem Inhalt entfernen klappt das nicht face-sad Dafür jemand nen Tipp ???


Wäre super wenn ihr mir Tipps oder Hilfestellungen geben könntet !

Vielen Dank im vorraus !


Mfg Beatzler

Content-ID: 107566

Url: https://administrator.de/contentid/107566

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

bastla
bastla 29.01.2009 um 22:05:11 Uhr
Goto Top
Hallo Beatzler und willkommen im Forum!

Zu Deiner ersten Frage:
findstr /c:"TESTWORT" "D:\Die Datei.txt">nul && "C:\Scripts\Weiterer Batch.bat"
bestimmte Sonderzeichen mittels batch aus .txt datein herrauslöschen
Ob das mit Batch (einigermaßen schmerzfrei) zu machen ist, hängt davon ab, wie Du "Sonderzeichen" definierst - einfacher ist es auf jeden Fall per VBScript (bzw Batch mit VBS) zu lösen, zB:
@echo off & setlocal
set "Datei=D:\Die Datei.txt"  
set "Zeichen=*"  

set R=%temp%\ReplaceChars.vbs
>%R% echo Set a=WScript.Arguments:F=a(0):C=a(1):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(T,C,"")  

cscript //nologo %R% "%Datei%" "%Zeichen%"  
Das Ersetzen erfolgt (ohne Erstellung einer Sicherungskopie) unmittelbar "in der Datei".

Grüße
bastla
Beatzler
Beatzler 30.01.2009 um 11:53:48 Uhr
Goto Top
Hey Bastla,

super vielen Dank für deine schnelle und super Hilfe face-smile

Das funktioniert perfekt und genauso wie ich es mir vorgestellt habe !!! Vielen dank !

Eine kleinigkeit habe ich aber leider nicht bedacht, habe nun mit deinem Code schon ein wenig rumgespielt es aber leider noch nicht hinbekommen ....

Undzwar wird im Textdokument in welchem die * entfernt werden dann alles zusammengeschrieben, ein Beispiel: aus "Dies*ist*ein*Test" würde dann "DiesisteinTest" alles zusammengeschrieben .... wäre es irgendwie realisierbar anstatt das Zeichen * zu löschen ein Leerzeichen oder nen Punkt oder ! einzufügen ?

Das wäre super !

Vielen Dank nochmals ist echt klasse !

Mfg Beatzler
bastla
bastla 30.01.2009 um 12:02:33 Uhr
Goto Top
Hallo Beatzler!

Vielleicht ist Dir das "Replace" im (VBS-)Code aufgefallen - derzeit wird aufgrund der Schreibweise
... Replace(T,C,"")
im Text das übergebene Zeichen (Character - ab und an mag ich's ausländisch face-wink) durch den zwischen den folgenden Anführungszeichen stehenden Text (also schlichtweg nix) ersetzt. Wenn daher anstelle des Zeichens (*) ein Punkt hin soll:
... Replace(T,C,".")
Schöner wäre das natürlich mit einer zusätzlichen Variablen, aber funktionieren wird's auch so.

Grüße
bastla
Beatzler
Beatzler 30.01.2009 um 12:34:52 Uhr
Goto Top
Hey,

ahhh okay dadrin wird das festgelegt, super !!! Vielen vielen dank nochmals ! Echt genial genau danach habe ich schon sehr lange gesucht nun läuft das alles perfekt face-smile

Mfg Beatzler
Beatzler
Beatzler 14.02.2009 um 20:40:36 Uhr
Goto Top
Zitat von @bastla:

findstr /c:"TESTWORT"
> "D:\Die Datei.txt">nul &&
> "C:\Scripts\Weiterer Batch.bat"
> 


Hey,

ich bräuchte nochmals kurz ne Hilfestellung, tut mir leid aber habe nun schon wieder alles mögliche mal selber probiert, klappt jedoch leider nicht ....

wie bekomme ich es mit deinem angegeben Code hin das das z.B. am Anfang des Programmes steht, wenn das bestimmte Wort gefunden wurde die entsprechende Bat zusätzlich startet aber die eigentliche von der aus das gestartet wurde weiterläuft????

also Quasi:


findstr /c:"TESTWORT" "D:\Die Datei.txt">nul && " Start C:\Scripts\Weiterer Batch.bat"
echo hier läuft die bat dann weiter nachdem die batch.bat gestartet wurde ....

Mfg Beatzler
bastla
bastla 14.02.2009 um 20:59:20 Uhr
Goto Top
Hallo Beatzler!

Wo ist das Problem? Sollte doch eigentlich so funktionieren:
findstr /c:"TESTWORT" "D:\Die Datei.txt">nul && Start "" "C:\Scripts\Weiterer Batch.bat"  
echo hier läuft die bat dann weiter nachdem die "Weiterer Batch.bat" gestartet wurde ....  
Grüße
bastla
Beatzler
Beatzler 14.02.2009 um 21:08:46 Uhr
Goto Top
Hey,

jaa nun klappts, ich hatte hinter start und vor dem zielpfad wohl nur die "" zusätzlich vergessen .... wofür immer die auch stehen müssen ist bestimmt nen standard für diesen aufruf richtig ?

Ich muss mir echt nochmal die ganzen Grundlagen genauer reinziehen glaub ich ....

Vielen Dank dir auf jedenfall trotzdem nochmal !

Mfg Beatzler
bastla
bastla 14.02.2009 um 21:15:56 Uhr
Goto Top
Hallo Beatzler!

Diese Anführungszeichen sind eine Falle, in die man/frau schon mal tappen kann ...

Zwischen diese Anführungszeichen könntest Du einen Fenstertitel schreiben (siehe "start /?").

Grüße
bastla
Beatzler
Beatzler 14.02.2009 um 23:48:54 Uhr
Goto Top
Hey,

ahh okay das ist gut zu wissen face-smile

Man lernt nie aus face-wink

VIelen dank nochmals !

Mfg Beatzler
Beatzler
Beatzler 22.02.2009 um 18:49:24 Uhr
Goto Top
Hey,

kann man solch eine Abfrage evtl. noch irgendwie optimieren / schneller machen?

Ich habe momentan mehrere dieser Abfragen in einer Batch hintereinander ... Nun dauert das natürlich eine gewisse Zeit bis er diese alle nach und nach abgearbeitet hat ....

Könnte man dies irgendwie optimieren?

Vielen Dank für Tipps face-smile

Mfg Beatzler
bastla
bastla 22.02.2009 um 19:52:05 Uhr
Goto Top
Hallo Beatzler!

Vielleicht könntest Du ein wenig weiter ausholen und etwas zum Hintergrund der ganzen Aktion sagen ...

Grüße
bastla
Beatzler
Beatzler 22.02.2009 um 20:37:27 Uhr
Goto Top
Juhu Bastla,

naja also ich habe eine Batch welche mir in eine Textdatei eine bestimmte Meldung schreibt. Diese Meldung enthält div. Abkürzungen z.B. Nr. oder bestimmte Zahlenkombinationen "2374"

Nun soll dieses Textdokument wo drin die Abkürzungen stehen von einer weiteren Batch untersucht werden und die Abkürzungen gegen komplette Wörter in einem anderem Textdokument ersetzt werden. Dieses Textdokument wird dann wiederrum von einer Software ausgelesen um eine Durchsage vorzulesen ....

Also Quasi so:

Meldung. txt enthält : "Code Nr. 1234"

Dieses Dokument wird nun mit einer anderen Batch in der div. Kürzel abgefragt werden "untersucht" und schreibt diese dann aus oder um in ein 2. Textdokument.

Meldung2.txt enthält danach dann: "Durchsage: CODE Nummer TEST " Somit ist aus Nr. = Nummer und aus 1234 = Test geworden...

Meldung2.txt wird dann von einem Sprachtool vorgelesen ....

Hoffe das ist einigermaßen verständlich ...

Wenn nun halt div. Kürzel vorhanden sind muss er ja alle Kürzel erstmal abfragen ob die überhaupt in der Meldung stehen, auch wenn diese gar nicht in der Meldung stehen .... das dauert dann umso mehr Kürzel es sind natürlich schon recht lange ...

Hättet ihr da ggf. nen Verbesserungsvorschlag um das zu optimieren?

Vielen Dank für Tipps !

Mfg Beatzler
bastla
bastla 22.02.2009 um 20:53:41 Uhr
Goto Top
Hallo Beatzler!

Würde es sich da nicht anbieten, gleich die erste Batchdatei einen "richtigen" Job machen zu lassen, indem diese schon alle benötigten Informationen im Klartext schreibt?

Falls das nicht möglich sein sollte: Würde ein einfaches Ersetzen der Codes durch die "Langfassung" genügen, oder enthält die "Meldung.txt" noch zusätzliche Informationen? Und: Wie ist die Meldungsdatei grundsätzlich aufgebaut - jeder Code in einer eigenen Zeile?

Grüße
bastla
Beatzler
Beatzler 22.02.2009 um 21:07:01 Uhr
Goto Top
hey

also eine direkte Ersetzung des Code´s in dem betreibe ich momentan ja schon.

In der Batch sind halt einfach nacheinander immer folgende Abfragen drin so ungefähr:


set "Datei=D:\Meldung.txt"

set "Zeichen=Nr."
set R=%temp%\ReplaceChars.vbs
%R% echo Set a=WScript.Arguments:F=a(0):C=a(1):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(T,C,"NUMMER")
cscript nologo %R% "%Datei%" "%Zeichen%"

set "Zeichen=1234"
set R=%temp%\ReplaceChars.vbs
%R% echo Set a=WScript.Arguments:F=a(0):C=a(1):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(T,C,"TEST")
cscript
nologo %R% "%Datei%" "%Zeichen%"

usw.

Meistens ist in der Meldung.txt nur eine einzelne Zeile drin. In dieser Zeilen stehen div. Wörter und halt auch die Codewörter aber alle mit Leerzeichen getrennt. Meistens sind´s nur ein bis zwei Kürzel ...

Mfg Beatzler
bastla
bastla 22.02.2009 um 21:16:25 Uhr
Goto Top
Hallo Beatzler!

Sind die einzelnen (aufgrund der enthaltenen Wörter aufzurufenden) Batches für diese Ersetzungen gedacht? Dann wäre es doch sinnvoller, auf Basis einer Ersetzungstabelle in einem einzigen VBScript alle Ersetzungen abarbeiten zu lassen ...

Grüße
bastla
Beatzler
Beatzler 22.02.2009 um 21:44:41 Uhr
Goto Top
Hey,

ja wie gesagt es wird in einem batchfile immer nacheinander abgefragt ob dieses eine CodeWort vorhanden ist und wenn ja dann ersetzt er es in dem gleichem Textfile durch ein hinterlegtes richtiges Wort ( wie in deinem angegeben Code set Zeichen usw.)

Das dauert halt recht lange weil er ja immer alle Codewörter prüfen muss egal ob diese diesmal vorhanden sist oder nicht ...


ist schwer zu erklären ...

Da das ganze dann recht lange dauert von der eigentlichen Übermittlung der "Codenachricht" bis zum vorlesen über das Sprachtool würde ich das ganze gerne irgendwie beschleunigen ...

also nochmal zusammengefasst:

1.) Codenachricht.txt wird von einer batch erstellt
2.) Eine weitere Batch sucht in dieser Codenachricht.txt nach bestimmten Codes um diese direkt gegen vollständige Wörter zu ersetzen. Es werden jedesmal alle Codes abgefragt obwohl meist nur wenige Codes pro Nachricht ersetzt werden müssen. Durch diese Abfrage mit oben genannten Script kommt dann aufgrund der verschiedenen Codewörter eine recht lange Wartezeit zustande.
3.) Sind alle Codewöter in der Codenachricht.txt umgewandelt worden startet eine Sprachausgabe und liest die Codenachricht.txt vor

Ist bissle kompliziert :D


Vielen Dank trotzdem nochmals für deine Mühe und tolle Hilfe !

Mfg Beatzler
bastla
bastla 22.02.2009 um 21:51:14 Uhr
Goto Top
Hallo Beatzler!

Dann wäre mein obiger Vorschlag vermutlich der richtige Weg - allerdings komme ich heute nicht mehr dazu ...

Grüße
bastla
Beatzler
Beatzler 22.02.2009 um 22:28:07 Uhr
Goto Top
Hey Bastla,

jaa das ganze ist nur ein kleines privates Projekt von mir welches keine Eile hat es funktioniert ja erstmal alles jetzt schon super soweit zum Glück dank deiner Hilfe! face-smile Nun gehts halt noch ans " ergänzen / optimieren " ;)

Evtl. hättest ja die Tage nochmal nen kleinen Hinweis für mich wie du das genau meinst wenns nicht zu aufwendig ist ?

Mfg Beatzler
bastla
bastla 23.02.2009 um 18:07:00 Uhr
Goto Top
Hallo Beatzler!

Mit dem folgenden VBScript sollten direkt "in der Datei" alle vorgegebenen Ersetzungen durchgeführt werden:
'Angabe der Ersetzungspaare als "TextAlt=TextNeu"  
Ers = Array(_
"Nr.=Nummer",_  
"1234=Test",_  
"4321=Versuch")  

Trenn = "=" 'Trennungszeichen zwischen TextAlt und TextNeu  

If WScript.Arguments.Count > 0 Then
    Datei = WScript.Arguments(0)
Else
    WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")  

For i = 0 To UBound(Ers)
	Ers(i) = Split(Ers(i), Trenn)
Next

Text = fso.OpenTextFile(Datei).ReadAll
For i = 0 To UBound(Ers)
	Text = Replace(Text, Ers(i)(0), Ers(i)(1), 1, -1, vbTextCompare)
Next
fso.CreateTextFile(Datei, True).Write Text
Aufzurufen ist das Script mit Übergabe der Meldungsdatei, also etwa
cscript //nologo C:\Scripts\Ersetzungen.vbs "D:\Meldung.txt"
Weitere Ersetzungspaare können nach dem Muster der Zeilen 3 und 4 eingefügt werden, wobei nach dem letzten dieser Paare (wie in Zeile 5 gezeigt) eine schließende Klammer folgen muss.

Bei der Suche nach einem zu ersetzenden Wort (Textteil) wird nicht zwischen Groß- und Kleinschreibung unterschieden (gefunden würden also auch "nr.", "nR." oder "NR.").

Falls das aktuelle Trennzeichen "=" selbst in einem Such- oder Ersetzungstext vorkommen sollte, kannst Du es gegen ein anderes Zeichen (etwa "$") ersetzen und müsstest dieses dann in Zeile 7 eintragen und in den Zeilen davor anstelle des derzeitigen "=" verwenden.

Grüße
bastla
Beatzler
Beatzler 23.02.2009 um 21:05:48 Uhr
Goto Top
Hey

boah super ! Vielen Dank erstmal face-smile

Das sieht echt gut aus !!! Kann es leider heute nicht mehr testen, aber werde es gleich morgen versuchen und dann nochmal nen feedback geben face-smile

Vielen Dank erstmal !

Mfg Beatzler
Beatzler
Beatzler 24.02.2009 um 10:00:33 Uhr
Goto Top
Hey.

habe es soeben getestet und ich bin begeistert face-smile Genauso schnell wie es jetzt damit läuft ist es für meine zwecke perfekt !! face-smile

Echt genial!

Vielen Dank dir.

Mfg Beatzler
Beatzler
Beatzler 25.02.2009 um 21:02:03 Uhr
Goto Top
Hey,

ich muss nochmal kurz doof nachhacken sorry face-sad

Deine Skript Datei funktioniert echt super jedoch hab ich grad ein kleines Problem festgestellt. Habs grad das erste mal mit Sprachtool getestet und dabei festgestellt das er vor dem eigentlichem Text nun immer "Komma" sagt.... habe auch schon herrausgefunden wodran das liegt undzwar steht nach der Skiptbearbeitung in der Meldung.txt der aufgelöste Code wie folgt:

" Dies ist ein Test "

Er setzt den gesamten Text in "" und erstellt nach dem allerersten " ein leerzeichen. Dieses Leerzeichen in Verbindung mit dem " wertet das Sprachtool allerdings als komma aus ;( warum auch immer....

Gibt es eine Möglichkeit diese erste Leerstelle nicht zu erzeugen oder mit deinem weiteren Skript nachdem Skript Durchlauf zu enfernen ?

Habs hier mit versucht nachdem Skript aber das klappt nicht mit " " leider :

@echo off & setlocal
set "Datei=D:\Die Datei.txt"
set "Zeichen=*"

set R=%temp%\ReplaceChars.vbs
%R% echo Set a=WScript.Arguments:F=a(0):C=a(1):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll:fso.CreateTextFile(F,True).Write Replace(T,C,"")

cscript //nologo %R% "%Datei%" "%Zeichen%"


Mfg Beatzler
bastla
bastla 25.02.2009 um 21:13:41 Uhr
Goto Top
Hallo Beatzler!

Könntest Du eine Ausgangsdatei und das Ergebnis (als "" formatiert) sowie Deine Ersetzungen posten? Eigentlich "erfindet" das Script nichts dazu - Anführungszeichen, die vorher nicht da waren, sollten es nachher genauso wenig sein, wie Leerzeichen.

Eine Erklärung für Letztere wäre, dass in der Ersetzungsliste nach dem "=" ein Leerzeichen steht - dieses würde dann als Teil des Ersetzungswortes betrachtet.

Grüße
bastla
Beatzler
Beatzler 25.02.2009 um 21:48:03 Uhr
Goto Top
Hey,

du hast recht sorry,

es stammte von einem anderen skript welche ich aber nun dank dem VBS Skript auch gleich mit entfernen kann und somit alles über eins laufen lassen kann echt perfekt face-smile

Habe das behoben und es läuft face-smile

Mfg und vielen Dank nochmals ! Beatzler
Beatzler
Beatzler 29.08.2009 um 22:37:26 Uhr
Goto Top
Hallo Bastla,

habe dein Skript immer noch am laufen hier ist echt genial face-smile

Mir ist nur soeben eine Kleinigkeit aufgefallen

Wenn ich ein Wortkürzel z.B.: AS durch "Allgemeine Sprache" ersetzen möchte klappt dies auch wunderbar!

Gibt es aber nun ein Wort in der Filterdatei welches z.B.: Tasse heißt und auch gar nicht weiter gefiltert werden soll sondern als Tasse ausgesprochen werden soll wird das as in Tasse durch "Allgemeine Sprache" ersetzt.

Das Ergebnis der Durchsage: "TAllgemeine Sprachesse"

Könnte man dass irgendwie unterbinden ?

Weiß leider nicht so recht wie face-sad

Vielen Dank für jeden Tipp !

Mfg Beatzler
bastla
bastla 30.08.2009 um 08:36:45 Uhr
Goto Top
Hallo Beatzler!

Voraussetzung für einen automatisierten Ablauf sind eindeutigie Kriterien - wenn Du also etwa festlegen kannst, dass für die Ersetzung eine exakte Übereinstimmung (daher auch hinsichtlich Groß-/Kleinschreibung) erforderlich ist, wäre das obige Problem ev durch konsequente Großschreibung der Wortkürzel und Änderung des Replace() auf folgende Schreibweise zu lösen:
Text = Replace(Text, Ers(i)(0), Ers(i)(1))
Andere Möglichkeit: Unter der Annahme, dass vor und/oder nach dem Wortkürzel ein Leerzeichen steht, kannst Du diese(s) Leerzeichen in die Ersetzungsdefinition einbeziehen:
" AS = Allgemeine Sprache ",_
Gibt es allerdings keine allgemein gültige Regel, in welchem Fall die Zeichenfolge "AS" ersetzt werden soll, lässt sich das nicht per Script lösen ...

Grüße
bastla
Beatzler
Beatzler 30.08.2009 um 17:09:19 Uhr
Goto Top
Hey,

super vielen Dank ! Das reicht mir schon so kann ich den "Filter" genauer einstellen !

Vielen Dank !

MFG Beatzler