16. Revival von der Desktopsuchmaschinenbatch Cassandra als Batch mit html-Linkausgabe

Einleitung/Beschreibung

Cassandra ist eine primitive Software (Desktopsuchmaschine, Batch) zur Offlinesuche von HTML und Textdokumenten, die in einer HTML-Linkliste die Treffer als aktive Links mit einem kurzen Text im Google-Style ausgibt.
Durch Doppelklicken der cassandra.bat wird die Anwendung gestartet.

Danach geben sie in die geöffnete cmd den Suchbegriff ein: ü,ä,ö,ß sind verboten, aber durch Ersetzen durch einen Stern als Platzhalter wie z. B. P*pste bekommen sie mit Sicherheit die richtigen Ergebnisse...

Die Linkliste (html-Seite) wird automatisch gestartet.

Es werden Dateien parallel und in Unterordnern durchsucht und in der html-Seite Cassandra.html ausgegeben. Diese Seite wird bei einer Neueingabe überschrieben.

Die Ergebnisse werden bei Betätigung des Hyperlinks im selben Browserfenster angezeigt.
Durch die Zurücktaste des Browsers kommen sie zur Linkliste zurück.

Es ist egal welcher Browser als Standardanwendung eingestellt ist: Ich manipulierte MSO links so, dass sie für jeden Browser kompatibel sind.

Dieses Tool ist für Amateure und Administratoren interessant, weshalb das Niveau dieser Abhandlung auch ein wenig höher ist.

Ich gebe den Quelltext als Downloadlink an, würde dann den Text mit Copy und Paste in ein Textdokument kopieren und in beliebigenNamen.bat umbenennen!
Begründung: Vermeidung von Eintrag im NFTS-Stream als betriebsfremde Software aus dem Internet und damit verbundene Probleme.

Download, cassandra.txt, ca. 3 KB

Für diejenigen, die ein Inputfeld bevorzugen, habe ich eine Gui aus dem VBS-Bereich kreiert. Den Beschreibungstext des Inputfeldes können sie zwischen den Anführungszeichen im Quelltext anders gestalten. Das VBS-Script wird kurzfristig entpackt, ausgeführt und ein Textdokument mit dem Suchbegriff kreiert.

Hinterher wird das alles gelöscht. VBS muss aktiv sein, es werden keine Administrationsrechte benötigt.

Download, cassandramitvbs.txt, 4 kb

Tip: Dokument aufrufen und Text kopieren und die Dateiendung mit beliebigerName.bat speichern. Doppelklicken. Suchwort in Inputfeld eingeben - mit O. K. bestätigen. Dann alles gleich.


Erklärung des Quellcodes

If exist cassandra.htm del cassandra.htm

Wenn eine Suchliste existieren sollte (von einer vorherigen Suchanfrage), dann wird sie jetzt zerstört. Sie können ein Backup von einer Suchabfrage machen, in dem Sie die cassandra.htm einfach umbenennen.


echo Bitte suchwort eingeben:
set /p Suche=

Abfrage des Suchbegriffes: Ü,Ö....ß zwecklos, aber mit einem Sternchen klappt das auf jeden Fall.

dir /b /s *.txt >>textsuch.log
dir /b /s *.htm >>textsuch.log
dir /b /s *log >>textsuch.log

Das verwundert viele Menschen bestimmt, aber ich erstelle erstmal eine Suchliste mit allen potentiellen Kandidaten, die HTM, HTML und TXT sind. Die Parameter /b und /s geben mir die einfachen kompletten Dateipfade im aktuellen Ordner und seinen Unterordnern.
Die rote Zeile ist eine Erweiterung für Logdokumente, sie können von Bat, Xhtml, vbs, PHP...alle Textdokumente suchen lassen. Müssen das nur in der o. a. Form eingeben!!!


FOR /F "tokens=*" %%A IN ('findstr /N .* "textsuch.log"') DO echo %%A>>zahlsuch.log

Wir nummerieren die Zeilen des o. a. Doukuments, so dass dort 1: kompletter_Pfad_ mit_Dateinamen_ und_Endung steht.

for /f "delims=: tokens=1,2,3*" %%i IN (zahlsuch.log) DO findstr /r /s /i /c:"%Suche%" %%j:%%k  >>erg_%%i.log

Danach fragen wir diese Dateienliste zeilenweise mit dem Suchwort ab: Gehe als diese Liste durch, nehme einen Doppelpunkt als Separator (delims=: ), wodurch diese Zeile drei getrennte Abschnitte hat (tokens=1,2,3*).

Zur Erinnerung: Der erste Abschnitt ist die Nummernzahl und fortan %%i,  der zweite Abschnitt ist der Laufwerkname C,D oder ? ist %%j und der dritte Abschnitt der Rest des Pfades %%k.

Die Variable %Suche% war unser Suchbegriff. Die Syntax ist gewöhnungsbedürftig, aber richtig: Was kommt dann im Ergebnislog raus?

In der Art C:\Users\sternenhimmelstuermer\Desktop\cassandratst\cmd\funzt\abc.txt:auch ein hinweis im Dokument erg_1.log.

Die Zahlen steigen immer um 1, weil die Zeilen vorher durchnummeriert waren.

Wir haben jetzt also soviel Hilfsdokumente wie Dateien gefunden wurden, aber wenn in dem Dokument kein Treffer  erzielt wurde, dann wird gar nichts ausgegeben und es entsteht ein Nullbyte  Dokument!!! also zum Beispiel  erg_3.log  ohne Inhalt.
Das wird sogar bei der Mehrzahl der Dateien so sein, ist aber absolut richtig so!


set destination=%~dp0%
>"%destination%cassandra.html"  ECHO ^<html^>
>>"%destination%cassandra.html" ECHO ^<head^>
>>"%destination%cassandra.html" ECHO ^<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"^>
>>"%destination%cassandra.html" ECHO ^<title^>Ergebnis</title^>
>>"%destination%cassandra.html" ECHO ^<style type="text/css"^>
>>"%destination%cassandra.html" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%cassandra.html" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO ^</style^>
>>"%destination%cassandra.html" ECHO ^</head^>
>>"%destination%cassandra.html" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%cassandra.html" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<center^>^<div^>^<big^>^<big^>^<big^>^<span style="color: red;"^>^&^#x8CEC; cassandra ^&^#x8CEC;^</span^>^</big^>^</big^>^</big^>^</div^>^<c/enter^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<div^> Ihre letztes Ergebnis in Dokumenten (bat, htm, html, txt) ist...^</div^>
>>"%destination%cassandra.html" ECHO ^<br^>

Hier wird lediglich die HTML-Seite bis zur Mitte aufgebaut, die links fehlen noch und werden gleich eingefügt. Der erste Schritt ist die Pfadbestimmung (set destination=%~dp0%) im selben Ordner, wo dann auch die html -Seite liegt...


set /a x=1
:anfang
If not exist erg_%x%.log goto ausstieg
for /F "delims=: tokens=1,2,3*" %%i in (erg_%x%.log) do echo ^<p class=MsoNormal^>^<span lang=EN style='font-weight:normal'^>^<a href="file:///%%i:%%j"^>Text: %%k^</a^>^</span^>^</p^> >>result.log
set /a x=%x%+1
goto anfang
:ausstieg
Die folgenden Zeilen sind eine Schleifenkonstruktion, in der eine For-Funktion die einzeiligen erg_%x%.log abarbeitet-

Deshalb setze ich auch x=1

Dann geht die Schleife auch schon los und ich fange mit der Ausstiegsformel an: If not exist erg_%x%.log goto ausstieg.
Wenn also durch eine spätere Erhöhung (set /a x=%x%+1) kein Dokument mehr existiert, dann verlassen wir die Schleife.

Einschub/Wiederholung zur besseren Übersicht:
(for /F "delims=: tokens=1,2,3*" %%i in (erg_%x%.log) do echo ^<p class=MsoNormal^>^<span lang=EN style='font-weight:normal'^>^<a href="file:///%%i:%%j"^>Text:)

Falls gerade ihr Logikmodul sagt, dass jetzt irgendwie unsinnig ist, denn dann würde ja jedes Dokument einen Link erzeugen, dann wird ihnen mit dieser Erklärung geholfen:

Beim ersten Durchlauf nehmen wir einmal einen Treffer an, also erg_1.log ist kein Nullbyte-Dokument. Dann setze ich in diesem Durchgang einfach einen echo-Befehl in einer For-Schleife ein. Bei dem letzten For-Befehl sprach ich von drei Abschnitten, dass ist genau dasselbe: C:\Users\sternenhimmelstuermer\Desktop\cassandratst\cmd\funzt\abc.txt:auch ein hinweis
Separator ist der Doppelpunkt und wichtig ist jetzt nur, dass file:///%%i:%%j  später im MsoNormal für alle Browser leser ist:

Das ist eigentlich eine total krumme Syntax, halb aus dem File-Protokoll und halb aus der Pfadsyntax: Normalerweise können Firefox und Chrome keine Mso-Links lesen.

Ich mache die für alle Browser lesbar und benutze gelinde gesagt eine Schummellösung, die so nicht vorgesehen ist! Die Lösung ist neu und wirklich sehr hilfreich!!!

Doch was passiert nun, wenn ein Dokument keinen Suchtreffer enthält, also nichts in das Dokument ausgegeben wird?

Der For-Befehl läuft ins leere, weil es weder Tokens, Delims noch die Variablen %%i,%%j und %%k. For-Befehle sind genau und deshalb weigert sich der For-Befehl eine Ausgabe zu machen und tut damit genau das Richtige...

Nun, also werden nur die Linkzeilen ausgegeben, wo etwas drin steht und damit ist das Ziel erreicht. Nach der Prüfung sämtlicher Logs wird die Schleife beendet.

Einschubende


copy cassandra.html + result.log cassandra.htm
del cassandra.html

Nach dem Ausstieg werden die Dokumente zusammengesetzt.

del erg_*.log
del result.log
del textsuch.log
del zahlsuch.log

Dann werden die ganzen Logs erstmal vernichtet. Das lässt sich bei den Dokumenten schnell durchführen. Mit del erg_*.log  werden die meisten Logs eleminiert, aber da so ihre Logs nicht heißen dürften, also keine wirkliche Gefahr...

>>"%destination%cassandra.htm" ECHO ^</body^>
>>"%destination%cassandra.htm" ECHO ^</html^>
start "" "cassandra.htm"

Die HTM-Seite wird ergänzt und im letzten Akt als besonderer Service geöffnet.

Nochmal der zusammenhängende Text, bitte aus dem Downloadlink kopieren - sie könnten sonst Fehler kopieren - gerade mit  Edge: Der Editor arbeitet unsauber...

If exist cassandra.htm del cassandra.htm

echo Bitte suchwort eingeben^:
set /p Suche=

dir /b /s *.txt >>textsuch.log
dir /b /s *.htm >>textsuch.log

FOR /F "tokens=*" %%A IN ('findstr /N .* "textsuch.log"') DO echo %%A>>zahlsuch.log
for /f "delims=: tokens=1,2,3*" %%i IN (zahlsuch.log) DO findstr /r /s /i /c:"%Suche%" %%j:%%k  >>erg_%%i.log
set destination=%~dp0%
>"%destination%cassandra.html"  ECHO ^<html^>
>>"%destination%cassandra.html" ECHO ^<head^>
>>"%destination%cassandra.html" ECHO ^<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"^>
>>"%destination%cassandra.html" ECHO ^<title^>Ergebnis</title^>
>>"%destination%cassandra.html" ECHO ^<style type="text/css"^>
>>"%destination%cassandra.html" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%cassandra.html" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%cassandra.html" ECHO ^</style^>
>>"%destination%cassandra.html" ECHO ^</head^>
>>"%destination%cassandra.html" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%cassandra.html" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<center^>^<div^>^<big^>^<big^>^<big^>^<span style="color: red;"^>^&^#x8CEC; cassandra ^&^#x8CEC;^</span^>^</big^>^</big^>^</big^>^</div^>^<c/enter^>
>>"%destination%cassandra.html" ECHO ^<br^>
>>"%destination%cassandra.html" ECHO ^<div^> Ihre letztes Ergebnis in Dokumenten (bat, htm, html, txt) ist...^</div^>
>>"%destination%cassandra.html" ECHO ^<br^>
set /a x=1
:anfang
If not exist erg_%x%.log goto ausstieg
for /F "delims=: tokens=1,2,3*" %%i in (erg_%x%.log) do echo ^<p class=MsoNormal^>^<span lang=EN style='font-weight:normal'^>^<a href="file:///%%i:%%j"^>Text: %%k^</a^>^</span^>^</p^> >>result.log
set /a x=%x%+1
goto anfang
:ausstieg
copy cassandra.html + result.log cassandra.htm
del cassandra.html


del erg_*.log
del result.log
del textsuch.log
del zahlsuch.log

>>"%destination%cassandra.htm" ECHO ^</body^>
>>"%destination%cassandra.htm" ECHO ^</html^>
start "" "cassandra.htm"


Fazit

Eine Anwendung aus purer Batch und Ausgabe als HTML ist schon eine rudimentäre Anwendung, die das Herz von Administratoren und Semiprofessionellen Anwendern höher schlagen lassen sollte.

Ich habe hier einen rudimentären Kernel ohne grafischen Aufwand geschaffen, der ohne Programmier-Hochsprache oder grafischen GUI wie HTA auskommt.

Ich arbeite mit ungewöhnlichen Methoden, kalkuliere Nullausgaben ein und der MSo-Link für alle Browser sind eine Besonderheit.

Diese Abhandlung wird noch ergänzt, aber nicht mehr heute.

Ach ja, Hintergrund für die Anpassung sind verschärfte Sicherheitsbestimmungen für eine HTA, die eben keine Hyperlinks innerhalb der HTA weiterleitet -:)
Deshalb stieg ich aus der HTA aus und passte das zukunftssicher für Win10 an.