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.