125. Desktopsuchmaschine Merlin Software zum freien Download

Einleitung

Seit einigen Monaten verbesserte der Sternenhimmelstuermer das Desktop-Suchmaschinen-Projekt Merlin, dass nun in dieser verständlichen Abhandlung über die Bedienung sein Ende findet. Merlin hat jetzt die Dateigröße von 29 KB überschritten. 453 Zeilen Quellcode - na ja,  ein paar Zeilen mehr als die üblichen Projekte des Sternenhimmelstuermers...

Merlin ist Freeware und darf unter Nennung dieser Seite (Hyperlink) verbessert oder auch weitergegeben werden. Ansonsten bleiben die Rechte beim Autor, da Merlin im Freewaregedanken geschrieben wurde -
da ist die GNU-Lizenz einfach zu offen...

Inhaltsangabe
Erste Schritte
Bedienoberfläche
Quelltext
Voraussetzungen
Merlin erweitern: Plugins für Inhaltssuche erstellen
        für Anfänger Erweiterung *.log, *.csv...
        für Amateure *.xsl (Excel-Dokumente)
Bugs Neuerungen Reports

Erste Schritte

Merlin ist einfach konzipiert. Nachdem Sie die merlin.bat mit Doppelklick gestartet  haben,  werden  drei  HTml-Seiten generiert, die in einer HTA unmittelbar gestartet werden. Der Name Merlin der Batch ist Pflicht! Später können Sie Merlin über die Batch oder besser über die Merlin.HTA neu starten. Batch und HTA müssen in einem Ordner liegen. Verschieben Sie die Batch allein, so wird beim nächsten Start eine neue HTA generiert. Die Dateien, die durchsucht werden, müssen im gleichen Ordner oder in Unterordnern liegen.

Bedienoberfläche


Merlin besteht aus drei Frames. Sie können die Größe beliebig skalieren.

Frame links: Indexerstellung

Im linken Frame ist ein Button zur Indexerstellung für Worddokumente (doc und docx). Diesen sollten Sie erstmal betätigen. Voraussetzung ist ein installiertes Wordprogramm. Merlin durchsucht darauf  alle  Unterordner und parallel liegenden Dokumente. Diese werden im Ordner indexdocx als html-Dokumente mit reinem Text und ausführbaren Link zur Originaldatei (Worddokument) erstellt.  Der Suchindex muss nur einmal erstellt werden, aber da bei Ihnen Dokumente hinzukommen oder verändert werden, sollten Sie den Suchindex von Zeit zu Zeit neu erstellen. Der Suchindex wird dabei komplett neu erstellt. Das Erstellen dauert je nach Umfang der Dokumente von wenigen Sekunden bis mehrere Minuten...

Frame links: Archivierung von Dateien

Es werden Kopien archiviert. Die Originale bleiben erhalten.  Es gilt wieder die Regel: Dateien im gleichen Ordner und in Unterordnern werden "archiviert".

Unter dem Indexerstellungs-Button sind drei Inputfelder und ein Archiv-Button. Sie können beliebige Dateitypen archivieren.

Für mp3 z. B. Dateityp mp3, 2012 (als Jahreszahl vierstellig) und z. B. 3 Jahre. Alle drei Felder müssen ausgefüllt sein.

Es wird nun ein neuer Ordner mit Namen Archiv erstellt, in dem drei Ordner 2009, 2010, 2011 und 2012 sind. Ja, dass sind eigentlich 4, aber 2012 ist das Ausgangsjahr - und die Jahre dahinter sind drei -:)
Sie können auch Teilausschnitte aus der Vergangenheit archivieren, z. B. docx, 2009, 4 . für vier Jahre in der Vergangenheit...

Die Ordner beinhalten beim letzten Beispiel die docx`s nach Jahren sortiert. Das geht natürlich auch mit pdf,doc....ist eben egal...Sie können mehrmals nacheinander mehrere Dateitypen archivieren. Archivieren Sie danach PDF, dann
liegen die PDF`s eben nach Jahren sortiert neben den docx`s.

Alte Ordner mit Jahreszahlen und deren Inhalt werden nicht zerstört (der Befehl mkdir ergänzt nur nicht bestehende Ordner und überschreibt demnach auch keine alten Dateien).

Im Ordner Archiv liegen noch zwei Batchdateien und ein Index der archivierten Dateien. Die sind nur zum Nachschauen für interessierte User. Ein Zugeständnis des Autors an die Lehrseite...Die Batchdateien sind keine standallone-Anwendung,
nur zur Demo des Quellcodes..., was für Batchschreiber interessant ist...

Die Bearbeitung findet überwiegend im Ordner Archiv statt. Es dürfte also kein Risiko vorliegen, dass von Ihnen Text- oder Log-Dateien zerschossen werden..


Inhaltssuche

obere Frame: Suchframe

Der obere Frame ist der Suchframe:

Sie können Text in das Suchfeld eingeben und eine Inhaltssuche starten (einschließlich Worddokumente, wenn Sie einen Index erstellt hatten, ansonsten nur txt, htm, html, bat)
Der Text kann mehrere Wörter beinhalten. Schwachstelle: bei mehreren Wörtern muss der Text im Originaldokument in einer Zeile stehen. Also lieber mit einem prägnanten Wort suchen...

Dann den Button Inhaltssuche drücken.

Die Dokumente werden Ihnen in einer Kurzvorschau als Liste mit Textausschnitt als ausführbarer Hyperlink angezeigt:

Merlin mit Treffer von Wordsuche


Drücken Sie den Hyperlink im unteren Frame, dann wird Ihnen das Dokument im selben unteren Frame angezeigt:

Merlin - Desktopsuchmaschine
Bild: Merlin mit Anzeige von indizierten Worddokument. Die Dokumente das Indexes können mit dem Hyperlink in der ersten Reihe ausgeführt werden!

Deshalb gibt es den Zurück-Button im oberen Frame, der Sie wieder zur Ergebnisliste zurückführt, wenn Sie sich einzelne Ergebnisse anzeigen lassen.

Tip Inhaltssuche

Die Inhaltssuche dauert - Sie ist halt so schnell wie die Kommandozeile von Windows und sämtliche Dokumente müssen wortgenau durchsucht werden.  Während der Inhaltssuche öffnet sich ein cmd-Fenster und zeigt den Stand der Suche an.  Das friert dann scheinbar in der Zeile findstr /r /s /i /c:"ihr Suchwort" %destination%*.bat  >>erg.log für einen Anfänger erstmal ein. Das Merlin nicht eingefroren ist, sehen Sie am blinkenden Cursor in der cmd. Schließen Sie nicht das Fenster oder beenden Merlin.

Tun Sie es doch, so wird Merlin beim nächsten Start über die Batch die Suche wieder aufnehmen. Beim Start über die HTA hingegen klappt es. Es existiert dann ein Dokument  Namens suchwort.log im Ordner von Merlin, dass Sie löschen können oder nach der nächsten Inhaltssuche gelöscht wird..., also kein wirkliches Problem.

Das dauert je nach Umfang der Ordner, aber nach der ersten Sucheinheit geht das dann schneller. Wollen Sie schneller suchen. Dann lassen Sie die Archivierung mit den Dateien durchlaufen, die für Sie wichtig sind. Danach verschieben  Sie die Merlin-Batch in den Archivierungsordner und erstellen starten dort eine Indexierung. Dazu war die Archivierung gedacht. Schnell die Worddokumente nach Jahren sortieren und dann in den sortierten Dokumenten Suchen...Dann wird Merlin Blitzschnell... auch in der Inhaltssuche!

Dateisuche

Die Dateisuche sucht Dateien nach Dateinamen und erstellt eine ausführbare Liste im unteren Frame mit einer Größeneingabe in KB.

Sie können beliebige Namen mit Dateiendungen eingeben mit dem Schema beliebigeDatei.xxx . Wissen Sie nicht die Dateiendung, dann geben Sie probe.* für z. B. die Datei probe.pdf ein.

Richtig, Sie können mit der Wildcard Stern arbeiten und umgekehrt mit *.pdf  alle  PDF-Dateien auflisten. Es sind alle Dateinamen erlaubt...

Das hört sich jetzt alles erstmal schwierig an, wer aber das Grundprinzip verstanden hat, wird Merlin als nützlichen Helfer nicht mehr vermissen wollen.

Frame rechts unten

Das ist der Anzeigeframe für die Suchen. Alle Schrift, die gelb ist, ist ein Hyperlink, zu einer Datei oder einem Dokument. Suchen Sie z. B. nach *.pdf mit der Dateisuche (dort ist jedes Format erlaubt), dann wird bei installiertem Acrobat oder Foxitreader das Dokument in Merlin angezeigt, da diese Bestandteil des Internet Explorers bzw. der HTA als Plugin sind. Dann kommen Sie mit dem Zurück - Button im oberen Frame wieder zurück zur Liste.

Word hat kein Plugin im Internet Explorer, deshalb wird die externe Öffnung angeboten..
 


Quelltext

Dateiname

merlin.bat

(Der Name ist verbindlich!). Texteditor von Windows öffnen, unteren blauen Text hineinkopieren und unter  eben genannten Namen abspeichern. 

Vorsicht: Werden Ihnen die bekannten Dateiendungen nicht angezeigt, dann müssen Sie zuvor das Anzeigen von Dateiendungen auch bei bekannten Dateiendungen in einem beliebigen Ordner einstellen: Extras - Ordneroptionen - Registerkarte: Ansicht. Dann Häkchen bei  Erweiterungen bei bekannten Dateiendungen ausblenden entfernen. Sollte Ihnen auch die Menüleiste mit Extras nicht angezeigt werden, so gehen Sie in das Dropdownmenü von Organisieren - Layout und Menüleiste anzeigen. Ansonsten wird Ihnen das Dokument als merlin.bat.txt gespeichert.



Quelltext (blauer Text)


If exist archiv.log goto archiv
If exist dateiliste.log goto dateiliste
If exist suchwort.log goto inhaltensliste
If exist indexerstellung.log goto indexerstellung
set destination=%~dp0%
>"%destination%linkst.htm"  ECHO ^<html^>
>>"%destination%linkst.htm" ECHO ^<head^>
>>"%destination%linkst.htm" ECHO ^<title^>Merlin Suchmaschine^</title^>
>>"%destination%linkst.htm" ECHO ^<HTA:APPLICATION
>>"%destination%linkst.htm" ECHO         APPLICATIONNAME="Merlin"
>>"%destination%linkst.htm" ECHO VERSION = "1.5"
>>"%destination%linkst.htm" ECHO     SCROLL="yes"
>>"%destination%linkst.htm" ECHO     SINGLEINSTANCE="yes"
>>"%destination%linkst.htm" ECHO     WINDOWSTATE="maximize"
>>"%destination%linkst.htm" ECHO ^>
>>"%destination%linkst.htm" ECHO ^<style type="text/css"^>
>>"%destination%linkst.htm" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%linkst.htm" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%linkst.htm" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%linkst.htm" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%linkst.htm" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%linkst.htm" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%linkst.htm" ECHO ^</style^>
>>"%destination%linkst.htm" ECHO ^</head^>
>>"%destination%linkst.htm" ECHO ^</SCRIPT^>
>>"%destination%linkst.htm" ECHO ^<SCRIPT Language="VBScript"^>
>>"%destination%linkst.htm" ECHO Sub indexdocneu
>>"%destination%linkst.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%linkst.htm" ECHO     objFSO.CreateTextFile("indexerstellung.log")
>>"%destination%linkst.htm" ECHO     Set objFile = objFSO.OpenTextFile("indexerstellung.log", 2)
>>"%destination%linkst.htm" ECHO     objFile.WriteLine "Index dummy"
>>"%destination%linkst.htm" ECHO objFile.Close
>>"%destination%linkst.htm" ECHO dim shell
>>"%destination%linkst.htm" ECHO set shell = createobject("wscript.shell")
>>"%destination%linkst.htm" ECHO shell.run """merlin.bat""", 1, true
>>"%destination%linkst.htm" ECHO WINDOW.PARENT.inhalten.LOCATION.HREF="inhalten.HTM"
>>"%destination%linkst.htm" ECHO End Sub
>>"%destination%linkst.htm" ECHO ^</SCRIPT^>
>>"%destination%linkst.htm" ECHO ^<SCRIPT Language="VBScript"^>
>>"%destination%linkst.htm" ECHO Sub Runarchiv
>>"%destination%linkst.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%linkst.htm" ECHO     objFSO.CreateTextFile("archiv.log")
>>"%destination%linkst.htm" ECHO     Set objFile = objFSO.OpenTextFile("archiv.log", 2)
>>"%destination%linkst.htm" ECHO     objFile.WriteLine Dateiende.Value
>>"%destination%linkst.htm" ECHO objFile.Close
>>"%destination%linkst.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%linkst.htm" ECHO     objFSO.CreateTextFile("Jahrhundert.log")
>>"%destination%linkst.htm" ECHO     Set objFile = objFSO.OpenTextFile("Jahrhundert.log", 2)
>>"%destination%linkst.htm" ECHO     objFile.WriteLine Jahrhundert.Value
>>"%destination%linkst.htm" ECHO objFile.Close
>>"%destination%linkst.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%linkst.htm" ECHO     objFSO.CreateTextFile("Jahre.log")
>>"%destination%linkst.htm" ECHO     Set objFile = objFSO.OpenTextFile("Jahre.log", 2)
>>"%destination%linkst.htm" ECHO     objFile.WriteLine Jahre.Value
>>"%destination%linkst.htm" ECHO objFile.Close
>>"%destination%linkst.htm" ECHO dim shell
>>"%destination%linkst.htm" ECHO set shell = createobject("wscript.shell")
>>"%destination%linkst.htm" ECHO shell.run """merlin.bat""", 1, true
>>"%destination%linkst.htm" ECHO WINDOW.PARENT.inhalten.LOCATION.HREF="inhalten.HTM"
>>"%destination%linkst.htm" ECHO End Sub
>>"%destination%linkst.htm" ECHO ^</SCRIPT^>
>>"%destination%linkst.htm" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%linkst.htm" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>Suchindexerstellung (docx und doc)^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<input id=runbutton  class="button" type="button" value="Indexierung" name="run_button"  onClick="indexdocneu"^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>Archivierung von Dateien: Dateitypende ohne Punkt eingeben^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>^<div^>^<input type="text" name="Dateiende" size="5"^>^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>Höchste Jahr vierstellig eingeben^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>^<div^>^<input type="text" name="Jahrhundert" size="5"^>^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>Jahresanzahl der zu archivierenden Jahre eingeben^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<div^>^<div^>^<input type="text" name="Jahre" size="5"^>^</div^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^<input id=runbutton  class="button" type="button" value="Archiv" name="run_button"  onClick="Runarchiv"^>
>>"%destination%linkst.htm" ECHO ^<br^>
>>"%destination%linkst.htm" ECHO ^</body^>
>>"%destination%linkst.htm" ECHO ^</html^>
>"%destination%inhalten.htm"  ECHO ^<html^>
>>"%destination%inhalten.htm" ECHO ^<head^>
>>"%destination%inhalten.htm" ECHO ^<title^>Merlin Desktopsuchmaschine^</title^>
>>"%destination%inhalten.htm" ECHO ^<HTA:APPLICATION
>>"%destination%inhalten.htm" ECHO         APPLICATIONNAME="Merlin"
>>"%destination%inhalten.htm" ECHO VERSION = "1.5"
>>"%destination%inhalten.htm" ECHO     SCROLL="yes"
>>"%destination%inhalten.htm" ECHO     SINGLEINSTANCE="yes"
>>"%destination%inhalten.htm" ECHO     WINDOWSTATE="maximize"
>>"%destination%inhalten.htm" ECHO ^>
>>"%destination%inhalten.htm" ECHO ^<style type="text/css"^>
>>"%destination%inhalten.htm" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO ^</style^>
>>"%destination%inhalten.htm" ECHO ^</head^>
>>"%destination%inhalten.htm" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%inhalten.htm" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%inhalten.htm" ECHO ^<br^>
>>"%destination%inhalten.htm" ECHO ^</body^>
>>"%destination%inhalten.htm" ECHO ^</html^>
>"%destination%merlin.hta"  ECHO ^<html^>
>>"%destination%merlin.hta" ECHO ^<head^>
>>"%destination%merlin.hta" ECHO ^<title^>Merlin^</title^>
>>"%destination%merlin.hta" ECHO ^<HTA:APPLICATION
>>"%destination%merlin.hta" ECHO      ID="Merlin"
>>"%destination%merlin.hta" ECHO      APPLICATIONNAME="Merlin"
>>"%destination%merlin.hta" ECHO VERSION = "1.5"
>>"%destination%merlin.hta" ECHO      SCROLL="yes"
>>"%destination%merlin.hta" ECHO      SINGLEINSTANCE="yes"
>>"%destination%merlin.hta" ECHO      WINDOWSTATE="maximize"
>>"%destination%merlin.hta" ECHO      Border="thick"   
>>"%destination%merlin.hta" ECHO ^>
>>"%destination%merlin.hta" ECHO ^</head^>
>>"%destination%merlin.hta" ECHO ^<frameset cols="200,*" frameborder="1" border="1" framespacing="1"^>
>>"%destination%merlin.hta" ECHO ^<frame application="yes" src="linkst.htm" name="linkst" scrolling="auto"^>
>>"%destination%merlin.hta" ECHO ^<frameset rows="400,*" frameborder="1" border="1" framespacing="1"^>
>>"%destination%merlin.hta" ECHO ^<frame application="yes" src="obend.htm" name="obend" scrolling="auto"^>
>>"%destination%merlin.hta" ECHO ^<frame application="yes" src="inhalten.htm" name="inhalten" scrolling="auto"^>
>>"%destination%merlin.hta" ECHO ^</frameset^>
>>"%destination%merlin.hta" ECHO ^</frameset^>
>>"%destination%merlin.hta" ECHO ^</html^>
>"%destination%obend.htm"  ECHO ^<html^>
>>"%destination%obend.htm" ECHO ^<head^>
>>"%destination%obend.htm" ECHO ^<title^>Merlin Desktopsuchmaschine^</title^>
>>"%destination%obend.htm" ECHO ^<HTA:APPLICATION
>>"%destination%obend.htm" ECHO         APPLICATIONNAME="Merlin"
>>"%destination%obend.htm" ECHO VERSION = "1.5"
>>"%destination%obend.htm" ECHO     SCROLL="yes"
>>"%destination%obend.htm" ECHO     SINGLEINSTANCE="yes"
>>"%destination%obend.htm" ECHO     WINDOWSTATE="maximize"
>>"%destination%obend.htm" ECHO ^>
>>"%destination%obend.htm" ECHO ^>
>>"%destination%obend.htm" ECHO ^<style type="text/css"^>
>>"%destination%obend.htm" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%obend.htm" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%obend.htm" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%obend.htm" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%obend.htm" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%obend.htm" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%obend.htm" ECHO ^</style^>
>>"%destination%obend.htm" ECHO ^</head^>
>>"%destination%obend.htm" ECHO ^<SCRIPT Language="VBScript"^>
>>"%destination%obend.htm" ECHO Sub RunScript
>>"%destination%obend.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%obend.htm" ECHO     objFSO.CreateTextFile("suchwort.log")
>>"%destination%obend.htm" ECHO     Set objFile = objFSO.OpenTextFile("suchwort.log", 2)
>>"%destination%obend.htm" ECHO     objFile.WriteLine  WINDOW.PARENT.obend.BasicTextBox2.Value
>>"%destination%obend.htm" ECHO objFile.Close
>>"%destination%obend.htm" ECHO dim shell
>>"%destination%obend.htm" ECHO set shell = createobject("wscript.shell")
>>"%destination%obend.htm" ECHO shell.run """merlin.bat""", 1, true
>>"%destination%obend.htm" ECHO WINDOW.PARENT.inhalten.LOCATION.HREF="inhalten.HTM"
>>"%destination%obend.htm" ECHO End Sub
>>"%destination%obend.htm" ECHO ^</SCRIPT^>
>>"%destination%obend.htm" ECHO ^</SCRIPT^>
>>"%destination%obend.htm" ECHO ^<SCRIPT Language="VBScript"^>
>>"%destination%obend.htm" ECHO Sub RunMerlin
>>"%destination%obend.htm" ECHO     Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%obend.htm" ECHO     objFSO.CreateTextFile("dateiliste.log")
>>"%destination%obend.htm" ECHO     Set objFile = objFSO.OpenTextFile("dateiliste.log", 2)
>>"%destination%obend.htm" ECHO     objFile.WriteLine  BasicTextBox2.Value
>>"%destination%obend.htm" ECHO objFile.Close
>>"%destination%obend.htm" ECHO dim shell
>>"%destination%obend.htm" ECHO set shell = createobject("wscript.shell")
>>"%destination%obend.htm" ECHO shell.run """merlin.bat""", 1, true
>>"%destination%obend.htm" ECHO WINDOW.PARENT.inhalten.LOCATION.HREF="inhalten.HTM"
>>"%destination%obend.htm" ECHO End Sub
>>"%destination%obend.htm" ECHO ^</SCRIPT^>
>>"%destination%obend.htm" ECHO ^</SCRIPT^>
>>"%destination%obend.htm" ECHO ^<SCRIPT Language="VBScript"^>
>>"%destination%obend.htm" ECHO Sub neu
>>"%destination%obend.htm" ECHO WINDOW.PARENT.inhalten.LOCATION.HREF="inhalten.HTM"
>>"%destination%obend.htm" ECHO WINDOW.PARENT.linkst.LOCATION.HREF="linkst.htm"
>>"%destination%obend.htm" ECHO End Sub
>>"%destination%obend.htm" ECHO ^</SCRIPT^>
>>"%destination%obend.htm" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%obend.htm" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%obend.htm" ECHO ^<br^>
>>"%destination%obend.htm" ECHO ^<center^>^<div^>^<big^>^<big^>^<big^>^<span style="color: red;"^>Merlin^</span^>^<span style='color: red;font-size:18.0pt;font-family:Wingdings;mso-bidi-font-family:Wingdings'^>Y^</span^>^</big^>^</big^>^</big^>^</div^>^<c/enter^>
>>"%destination%obend.htm" ECHO ^<br^>
>>"%destination%obend.htm" ECHO ^<div^>Suchet und Ihr werdet finden!^</div^>
>>"%destination%obend.htm" ECHO ^<br^>
>>"%destination%obend.htm" ECHO ^<center^>^<div^>^<input type="text" name="BasicTextBox2" size="100"^>^&nbsp;^&nbsp;^&nbsp;^</center^>
>>"%destination%obend.htm" ECHO ^<br^>^<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2"^>
>>"%destination%obend.htm" ECHO ^<tbody^>^<tr^>
>>"%destination%obend.htm" ECHO ^<td style="vertical-align: top; text-align: center;"^>^<input id=runbutton  class="button" type="button" value="Inhaltssuche" name="run_button"  onClick="RunScript"^> ^<br^>^</td^>
>>"%destination%obend.htm" ECHO ^<td style="vertical-align: top; text-align: center;"^>^<input id=runbutton  class="button" type="button" value="Dateisuche" name="run_button"  onClick="RunMerlin"^>^</td^>
>>"%destination%obend.htm" ECHO ^<td style="vertical-align: top; text-align: center;"^>^<input id=runbutton  class="button" type="button" value="zurück" name="run_button"  onClick="neu"^>^</div^>^</td^>
>>"%destination%obend.htm" ECHO ^</tr^>^<tr^>
>>"%destination%obend.htm" ECHO ^<br^>
>>"%destination%obend.htm" ECHO ^<br^>
>>"%destination%obend.htm" ECHO ^</body^>
>>"%destination%obend.htm"  ECHO ^</html^>
start "" "merlin.hta"
exit
:dateiliste
set /p Dateiname=<dateiliste.log
set destination=%~dp0%
chcp 28591 > NUL
for /f "delims=" %%i in ('dir "%destination%%Dateiname%" /s /b /a-d') do @echo %%~zi^:%%~ni^:%%i >>gro.log
>"%destination%inhalten.html"  ECHO ^<html^>
>>"%destination%inhalten.html" ECHO ^<head^>
>>"%destination%inhalten.html" ECHO ^<title^>Merlin Desktopsuchmaschine^</title^>
>>"%destination%inhalten.html" ECHO ^<HTA:APPLICATION
>>"%destination%inhalten.html" ECHO         APPLICATIONNAME="Merlin"
>>"%destination%inhalten.html" ECHO VERSION = "1.5"
>>"%destination%inhalten.html" ECHO     SCROLL="yes"
>>"%destination%inhalten.html" ECHO     SINGLEINSTANCE="yes"
>>"%destination%inhalten.html" ECHO     WINDOWSTATE="maximize"
>>"%destination%inhalten.html" ECHO ^>
>>"%destination%inhalten.html" ECHO ^<style type="text/css"^>
>>"%destination%inhalten.html" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.html" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO ^</style^>
>>"%destination%inhalten.html" ECHO ^</head^>
>>"%destination%inhalten.html" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%inhalten.html" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%inhalten.html" ECHO ^<br^>
>>"%destination%inhalten.htm" ECHO ^<div^>Das Ergebnis der Suche:^</div^>
>>"%destination%inhalten.htm" ECHO ^<br^>
chcp 28591 > NUL
for /F "delims=: tokens=1,2,3*" %%i in (gro.log) do nothing >>neu_%%i.log & >>"neu_%%i.log" Echo ^<p class=MsoNormal^>^<span lang=DE style='font-weight:normal'^>^<a href="%%k:%%l"^>Dateiname %%j Größe %%i^</a^>^</span^>^</p^>
copy neu_*.log erg.log
copy inhalten.html + erg.log inhalten.htm
del dateiliste.log
del neu.htm
del neu_*.log
del gro.log
del erg.log
del inhalten.html
>>"%destination%inhalten.htm" ECHO ^</body^>
>>"%destination%inhalten.htm" ECHO ^</html^>
exit
:inhaltensliste
set destination=%~dp0%
set /p Suche=<suchwort.log
findstr /r /s /i /c:"%Suche%" %destination%*.bat >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.htm >erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.html >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.txt >>erg.log
>"%destination%inhalten.html"  ECHO ^<html^>
>>"%destination%inhalten.html" ECHO ^<head^>
>>"%destination%inhalten.html" ECHO ^<title^>Merlin Desktopsuchmaschine^</title^>
>>"%destination%inhalten.html" ECHO ^<HTA:APPLICATION
>>"%destination%inhalten.html" ECHO         APPLICATIONNAME="Merlin"
>>"%destination%inhalten.html" ECHO VERSION = "1.5"
>>"%destination%inhalten.html" ECHO     SCROLL="yes"
>>"%destination%inhalten.html" ECHO     SINGLEINSTANCE="yes"
>>"%destination%inhalten.html" ECHO     WINDOWSTATE="maximize"
>>"%destination%inhalten.html" ECHO ^>
>>"%destination%inhalten.html" ECHO ^<style type="text/css"^>
>>"%destination%inhalten.html" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.html" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.html" ECHO ^</style^>
>>"%destination%inhalten.html" ECHO ^</head^>
>>"%destination%inhalten.html" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%inhalten.html" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%inhalten.html" ECHO ^<br^>
>>"%destination%inhalten.htm" ECHO ^<div^>Das Ergebnis der Suche:^</div^>
>>"%destination%inhalten.htm" ECHO ^<br^>
FOR /F "tokens=*" %%A IN ('findstr /N .* "erg.log"') DO echo %%A>> zahl.log
for /F "delims=: tokens=1,2,3*" %%i in (zahl.log) do nothing >>new_%%i.log & >>"new_%%i.log" Echo ^<p class=MsoNormal^>^<span lang=EN style='font-weight:normal'^>^<a href="%%k"^>Text: %%l^</a^>^</span^>^</p^>
copy new_*.log result.log
copy inhalten.html + result.log inhalten.htm
del inhalten.html
del suchwort.log
del result.log
del new_*.log
del erg.log
del zahl.log
>>"%destination%inhalten.htm" ECHO ^</body^>
>>"%destination%inhalten.htm" ECHO ^</html^>
exit
:archiv
mkdir "archivierung"
for %%I in (.) do echo %%~sI  >archivierung\zyx.txt
copy archiv.log archivierung\archiv.log
copy Jahre.log archivierung\Jahre.log
copy Jahrhundert.log archivierung\Jahrhundert.log
>"archive.bat"  ECHO set /p ende=^<archiv.log
>>"archive.bat" ECHO for %%%%I in (.) do echo %%%%~sI  ^>abc.txt
>>"archive.bat" ECHO set /p quelle=^<zyx.txt
>>"archive.bat" ECHO set /p standort =^<abc.txt
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO FOR /R "%%quelle%%" %%%%I IN (.) DO xcopy "%%%%I\*.%%ende%%" %%standort%% /Y /V /I /D
>>"archive.bat" ECHO CALL bereinigung.bat %%1 A:
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO for %%%%f in ("*.%%ende%%") do ^@echo %%%%f %%%%~ntf  ^>^>test.html
>>"archive.bat" ECHO set /p zeit=^<jahrhundert.log
>>"archive.bat" ECHO set /p zeitraum=^<jahre.log
>>"archive.bat" ECHO set /a end=%%zeit%%-%%zeitraum%%
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO FOR /F "Tokens=1,2,3,4" %%%%i in (test.html) do vo ^>%%%%l_%%%%j.log ^& ^>^>"%%%%l_%%%%j.log" Echo chcp 28591 ^^^> NUL ^&  ^>^>"%%%%l_%%%%j.log" Echo xcopy /i /k /d /y %%%%i %%zeit%%
>>"archive.bat" ECHO mkdir "%%zeit%%"
>>"archive.bat" ECHO goto erste
>>"archive.bat" ECHO :schleife
>>"archive.bat" ECHO set /a zeit=%%zeit%%-1
>>"archive.bat" ECHO del *.log
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO FOR /F "Tokens=1,2,3,4" %%%%i in (test.html) do vo ^>%%%%l_%%%%j.log ^& ^>^>"%%%%l_%%%%j.log" Echo chcp 28591 ^^^> NUL ^&  ^>^>"%%%%l_%%%%j.log" Echo xcopy /i /k /d /y %%%%i %%zeit%%
>>"archive.bat" ECHO mkdir "%%zeit%%"
>>"archive.bat" ECHO :erste
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO if exist **.**.%%zeit%%.log (xcopy /i /k /d /y **.**.%%zeit%%.log *.txt) else goto weiter
>>"archive.bat" ECHO chcp 28591 ^> NUL
>>"archive.bat" ECHO for /f "TOKENS=*" %%%%a in ('dir **.**.%%zeit%%.txt /b') do type "%%%%a" ^>^>ergebnis_%%zeit%%.bat
>>"archive.bat" ECHO start /wait cmd /c "ergebnis_%%zeit%%.bat"
>>"archive.bat" ECHO del ergebnis_%%zeit%%.bat
>>"archive.bat" ECHO :weiter
>>"archive.bat" ECHO if %%zeit%% equ %%end%% goto ende
>>"archive.bat" ECHO goto schleife
>>"archive.bat" ECHO :ende
>>"archive.bat" ECHO del *.txt
>>"archive.bat" ECHO del *.log
>>"archive.bat" ECHO del *.%%ende%%
>>"archive.bat" ECHO copy test.html test.log
>>"archive.bat" ECHO del test.html
>>"archive.bat" ECHO exit
>"bereinigung.bat"  ECHO @echo off ^& setlocal
>>"bereinigung.bat" ECHO FOR %%%%i in ( "* *.%%ende%%") do call :Nameneu "%%%%~nxi"
>>"bereinigung.bat" ECHO goto :eof
>>"bereinigung.bat" ECHO :Nameneu
>>"bereinigung.bat" ECHO Set "urname=%%~1"
>>"bereinigung.bat" ECHO Set "neu=%%urname: =_%%"
>>"bereinigung.bat" ECHO Ren "%%urname%%" "%%neu%%"
>>"bereinigung.bat" ECHO goto :eof
copy archive.bat archivierung\archive.bat
copy bereinigung.bat archivierung\bereinigung.bat
for %%I in (.) do echo %%~sI\archivierung  >wechsel.txt
set /p wechsel=<wechsel.txt
del Jahre.log
del Jahrhundert.log
del wechsel.txt
del archive.bat
del bereinigung.bat
del archiv.log
cd %wechsel%
start "" "archive.bat"
exit
:indexerstellung
del indexerstellung.log
if exist indexdocx rmdir /s /q indexdocx
mkdir "indexdocx"
set destination=%~dp0%
>"%destination%inhalten.htm"  ECHO ^<html^>
>>"%destination%inhalten.htm" ECHO ^<head^>
>>"%destination%inhalten.htm" ECHO ^<style type="text/css"^>
>>"%destination%inhalten.htm" ECHO a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a:hover {color:#FF0000; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu1 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu1:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:8pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu2 {color:#FFFFFF; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO a.menu2:hover {color:#FF0000; font-family:verdana,sans-serif,tahoma; font-size:9pt; text-decoration:none}
>>"%destination%inhalten.htm" ECHO ^</style^>
>>"%destination%inhalten.htm" ECHO ^</head^>
>>"%destination%inhalten.htm" ECHO ^<body style="color: white; background-color: black;" alink="red"
>>"%destination%inhalten.htm" ECHO link="yellow" vlink="#3333ff"^>
>>"%destination%inhalten.htm" ECHO ^<div^>Der Index wurde erstellt. Er befindet sich parallel als Ordner indexdocx. Er wird bei erneuter Erstellung komplett erneuert.^</div^>
>>"%destination%inhalten.htm" ECHO ^<div^>Verschieben Sie die Batch und HTA, dann auch den Index...^</div^>
>>"%destination%inhalten.htm" ECHO ^<br^>
>>"%destination%inhalten.htm" ECHO ^</body^>
>>"%destination%inhalten.htm" ECHO ^</html^>
for %%I in (.) do echo %%~sI  >pfad.txt
set destination=<pfad.txt
chcp 28591 > NUL
for /f "delims=" %%i in ('dir %destination%*.doc /s /b /a-d') do @echo %%i>>pfadliste.log
for /f "delims=" %%I in (pfadliste.log) do echo %%~sI  >>dos.txt
for /f "delims=" %%i in (dos.txt) do @echo %%~ni^:%%i  >>indexdocx.log
copy indexdocx.log indexdocx\indexdocx.log
del indexdocx.log
del pfadliste.log
del dos.txt
del pfad.txt
cd indexdocx
FOR /F "tokens=*" %%A IN ('findstr /N .* "indexdocx.log"') DO echo %%A>> indexzahl.log
>"genial.bat" Echo set destination=%%~dp0%%
>>"genial.bat" Echo ^>"wandel%%1.vbs"  ECHO  Set objWord = CreateObject("Word.Application")
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO Set objDoc = objWord.Documents.Open("%%3")
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO objDoc.SaveAs "%%destination%%an_%%1.txt", 2
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO objDoc.Close
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO objWord.Quit
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO Set objDoc = Nothing
>>"genial.bat" Echo ^>^>"wandel%%1.vbs" ECHO Set objWord = Nothing
>>"genial.bat" Echo start /wait "" "wandel%%1"
del indexdocx.log
FOR /F "tokens=1,2,3* delims=:"  %%i  IN (indexzahl.log) DO call genial.bat %%i %%j %%k:%%l
del genial.bat
for /F "delims=: tokens=1,2,3*" %%i in (indexzahl.log) do nothing >>an_%%i.log & >>"an_%%i.log" Echo ^<html^> ^<head^> ^<style type="text/css"^> a {color:#FFFF33; font-size:10pt; font-family:verdana,sans-serif,tahoma; text-decoration:none}^</style^>
for /F "delims=: tokens=1,2,3*" %%i in (indexzahl.log) do nothing >>an_%%i.log & >>"an_%%i.log" Echo ^<body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"^> ^<p class=MsoNormal^>^<span lang=EN style='font-weight:normal'^>^<a href="%%k:%%l"^>Text: %%j^</a^>^</span^>^</p^>
for /F "delims=: tokens=1,2,3*" %%i in (indexzahl.log) do nothing >>an_%%i.txt & >>"an_%%i.txt" Echo ^</body^> ^</html^>
set /a ex=1
:weiter
copy an_%ex%.log + an_%ex%.txt fund_%ex%.htm
set /a ex=%ex% + 1
if exist an_%ex%.log (goto weiter) else goto endspurt
:endspurt
del an_*.txt
del an_*.log
del wandel*.vbs
exit



Danach starten Sie die Batch mit einem Doppelklick...

Voraussetzungen

Windows 7
Word für die Erstellung und Suche mit Suchindex (ohne Suchindex entfällt nur die Suche in Worddokumenten).
VBS muss aktiviert sein (wird beim Start nötigenfalls abgefragt!)

Anmerkung: Keine Onlineanbindung, absolut seriös, da Quellcode bis zur letzten Zeile nachvollziehbar, keine Werbung, Viren...


Merlin erweitern: Plugins für Inhaltssuche erstellen

Die Wünsche der User, welche Dateien nach Textinhalt durchsucht werden, sind bekanntlich unterschiedlich. Der Sternenhimmelstuermer deckte mit htm, html, txt und bat - Dateien erstmal die Dateien ab, die häufig vorkommen.
Vielleicht wünschen Sie sich aber eine Suche nach einer anderen Art von textbasierten Dateien bei der Inhaltssuche. für die können Sie Merlin natürlich ziemlich einfach individualisieren - mit einer Batchzeile.

für Anfänger Erweiterung *.log, *.csv...

      

Dazu schauen wir uns die Zeilen für die Kommandozeile basierte Suche an:

findstr /r /s /i /c:"%Suche%" %destination%*.bat >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.htm >erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.html >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.txt >>erg.log

Der o. a. Quelltext ist in Merlin ebenfalls farblich angeglichen. Nehmen wir uns die letzte Zeile für das Suchen von Textdokumenten vor:

findstr /r /s /i /c:"%Suche%" %destination%*.txt >>erg.log

Findstr ist der Befehl zu der Suche in Dokumenten. Es wird in einem bestimmten Pfad %destination% im Ordner %destination% und in allen Unterordnern /s in einem bestimmten Dokumenttyp *.txt  nach Ihrer Eingabe %Suche% gesucht und die betreffende Zeile in ein Dokument >>erg.log hinzugefügt.

 "%Suche%" ist eine definierte Variable für das Suchwort, dass der User in die Grafikoberfläche eingab. %destination% ist der Pfad, der sich aus der Lage der von Merlin bestimmt. Mehr brauchen Sie nicht zu wissen. Bei der Benutzung eines Betriebssystems wissen Sie ja auch nicht, was weiter im Hintergrund abläuft - als User oder Anfänger sehen Sie immer nur einen Teilausschnit und den können Sie verändern.

Sie kopieren also einfach die letzte Zeile vom o. a. Text findstr /r /s /i /c:"%Suche%" %destination%*.txt >>erg.log und fügen die neue Zeile hinter oder zwischen den o. a. Codezeilen als Einzelzeile ein. Dann ändern Sie einfach die drei roten Zeichen (Dateiendung nach dem Punkt) in z. B. *.csv, also

findstr /r /s /i /c:"%Suche%" %destination%*.csv >>erg.log


. Dieses gilt natürlich nur für Dateien, die im Klartext vorliegen und nicht verschlüsselt sind. Im Zweifelsfall einfach mal im Editor von Windows eine Datei öffnen (dabei geht nichts kaputt, erst wenn Sie anfangen Zeichen zu änddern wird es gefährlich). Sehen Sie dort überwiegend Klartext und nicht nur kryptische Zeichen , dann funktioniert diese Methode auch für die Inhaltssuche. Bei PDF, MP3...geht das so natürlich nicht, da die nicht im Klartext vorliegen...

Wenn Sie also kein Batchschreiber sind, dann löschen Sie die Zeile findstr /r /s /i /c:"%Suche%" %destination%*.bat >>erg.log. Die durchsucht Batch-Dateien, was für den Sternenhimmelstuermer wictig ist, aber für viele User Müll ist...

Mal eine Auswahl von Dateien, die möglich sind:

findstr /r /s /i /c:"%Suche%" %destination%*.log >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.csv >erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.reg >>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.hta>>erg.log
findstr /r /s /i /c:"%Suche%" %destination%*.vbs>>erg.log

Also jetzt alles hirnlos reinkopieren? Nein, wenn Sie z. B. nur Word-Dokumente durchsuchen wollen, dann brauchen Sie zumindest HTM (der Suchindex basiert darauf). Ansonsten wird bei zu vielen Plugins die Geschwindigkeit gedrückt. Also auch nicht zu viel entfernen, was natürlich auch möglich ist.
Außerdem sind gerade Log-Dateien für Anfänger eher behinderlich in den Suchergebnissen, für fortgeschrittene User aber wichtig. Entscheiden Sie, was Sie brauchen...


für Amateure *.xlsx (Excel-Dokumente)


Da es doch ziemlich kompliziert ist, eine Erweiterung zu implementieren, rudert der Sternenhimmelstuermer ein wenig zurück und gibt den kompletten Code für Merlin mit Excel-Index. Einfach den Code aus diesem Code in einen Texteditor kopieren und sich freuen..., über Merlin mit Excelsuchfunktion. Der Suchindex wird einfach erweitert, also Excel wie Word im selben Ordner  gespeichert.

Das ist einfacher für den Autor und die Menschen. Hinweis: Eine alte Version von Merlin im selben Ordner sollte komplett gelöscht werden. Es gibt kurioserweise sonst Probleme. Auch ein Grund, warum diese Variante jetzt so angeboten wird.

Hinweis: Excel muss als Anwendung installiert sein, da dass Skript auf Excel zur Konvertierung für den Suchindex zugreift.

Erklärung:

Der Suchindex von Merlin basiert auf HTML. Im eben angegebenen Link wird die Erstellung eines Suchindexes komplett erklärt. Na ja, um ehrlich zu sein wurden drei Zeilen abgeändert, die hier nochmal im Schnelldurchlauf abgehandelt werden, da Sie sich nur unerheblich von dem ausführlich erklärten Quellcode unterscheiden:

Bei der Betätigung des Buttons Indexerstellung >>"%destination%linkst.htm" ECHO ^<input id=runbutton  class="button" type="button" value="Indexierung" name="run_button"  onClick="indexdocneu"^>  im linken Frame (linkst) wird ein Textdokument >>"%destination%linkst.htm" ECHO     Set objFile = objFSO.OpenTextFile("indexerstellung.log", 2) mit Namen  indexerstellung.log  erstellt und die merlin.bat gestartet >>"%destination%linkst.htm" ECHO shell.run """merlin.bat""", 1, true .  Durch den Parameter 1, true wartet die HTA erstmal auf die Ausführung der Batch.

Mit der Zeile am Anfang If exist indexerstellung.log goto indexerstellung Am Anfang der Batch wird geprüft, ob ein indexerstellung.log vorliegt, was nach Betätigung des Buttons Indexerstellung in der HTA ja nun der Fall ist.

Also springt die Batch zum Sprungpunkt:

:indexerstellung

Das ist ziemlich am Ende  der HTA  mit dem Code für das  erstellen eines Suchindexes für Word-Dokumente.

Die letzte Zeile der HTA überhaupt nach Erstellung des Suchindexes ist Exit. Vor der muss also unser Plugin erstellt werden und wir haben jetzt jede Menge kleiner Probleme, über die Sie sich klar werden müssen.

- Was ist mit VBA möglich? denkbar sind Erweiterungen mit allen Microsoft Office-Produkten, also im Klartext: Outlook, Powerpoint, Access Excel. Da kommt man mit VBS in Abwandlungen ran...
- Wie erweitere ich den Index,  um alte Dokumente nicht zu überschreiben, da ja der Index - nummernbasiert ist. Das ist eher leicht...

Neu ist eben eigentlich nur das VBS für die  Konvertierung  von  Excel  zu einem Textdokument:

>>"genialxsl.bat" Echo ^>"convert%%1.vbs"  ECHO  Set objExcel = CreateObject("Excel.Application")
>>"genialxsl.bat" Echo ^>^>"convert%%1.vbs" ECHO Set objWorkbook = objExcel.Workbooks.Open("%%3")
>>"genialxsl.bat" Echo ^>^>objExcel.Saved = true
>>"genialxsl.bat" Echo ^>^>"convert%%1.vbs" ECHO objworkbook.SaveAs "%%destination%%anex_%%1.txt", 6
>>"genialxsl.bat" Echo ^>^>"convert%%1.vbs" ECHO objWorkbook.Close false
>>"genialxsl.bat" Echo ^>^>"convert%%1.vbs" ECHO objExcel.Quit
>>"genialxsl.bat" Echo start /wait "" "convert%%1"
del indexexcel.log
FOR /F "tokens=1,2,3* delims=:"  %%i  IN (indexexcelzahl.log) DO call genialxsl.bat %%i %%j %%k:%%l


Das baut der Sternenhimmelstuermer wieder in eine Batch ein, die das VBS erstellt und am Ende startet. Durch start /wait wird das Warten , bis die Konvertierung fertig ist vererbt. Eine der wichtigsten Zeilen, da sonst die Hauptbatch gnadenlos weiterarbeiten würde, obwohl die Konvertierung vom VBS noch nicht abgeschlossen ist. Glauben Sie den Sternenhimmelstuermer, die Suchdokumente werden sonst nicht erstellt...

Diesmal wird also Excel geöffnet (Excel.Application). Aha, die Rolle eines sogenannten Makros (VBA, großer Bruder von VBS mit eigener leicht abgewandelter Syntax)  wird extern von Excel durch das Skript übernommen.  Excel muss also installiert sein, weil es sonst auch nicht geöffnet  Set objWorkbook = objExcel.Workbooks.Open("%%3") werden kann...Dann wird ein Workbook geöffnet und als Textdokument mit dem Parameter 6 (als kommagetrenntes Textdokument) gespeichert oder eben als Zeile

objworkbook.SaveAs "%%destination%%anex_%%1.txt", 6
.

Dann muss noch die nervige Meldung des Speicherns unterdrückt werden objWorkbook.Close false (false macht dass..) und das Dokument geschlossen werden.

Die Variablen %1 %3 entsprechen  wieder den Variablen %%i  und %%k:%%l aus der Merlin-Batch, bzw. der Zeilennummer (%1) und dem Pfad (%3) FOR /F "tokens=1,2,3* delims=:"  %%i  IN (indexexcelzahl.log) DO call genialxsl.bat %%i %%j %%k:%%l

Ja, der Sprung eben war ein wenig schwierig. Aber die Batch genialxls.bat wird nach Erstellung mit dem For-Befehl der merlin.bat just in Time für jede Zeile des indexexcelzahl.log mit Werten gefüttert. Das klingt verwirrend wurde aber bereits in der letzten Abhandlung megaausführlich erklärt...

Auf diese Weise können Sie nun durch geschicktes Anpassen und Googlen weitere Office-Anwendungen einbinden...
 

Bugs Neuerungen Reports

Auch der Sternenhimmelstuermer bleibt von Fehlern nicht verschont. Daher wird hier ein Report entstehen.

09.08.2012

- Merlin bekommt die Versionsnummer 1.5 zukünftig können Sie auch Neuerungen an der Versionsnummer ablesen
- Der Kopf von Merlin wurde dahingehend geändert

Fehler können über das Impressum dieser Seite an den Autor gepostet werden. Nein, dass Kontaktformular benötigt nicht die Eingabe der Straße, Adresse und funktioniert auch ohne Eingaben im Kopf. Der Sternenhimmelstuermer hat das nur als Option ins Kontaktformular aufgenommen, weil das für den Autor aus dem letzten Jahrhundert noch irgendwie zum Stil gehört...Da gab es noch Briefe und Postkarten...

- Bug ohne Folgen...

In der Zeile for /F "delims=: tokens=1,2,3*" %%i in (indexzahl.log) do nothing >>an_%%i.txt & >>"an_%%i.txt" Echo ^</body^> ^</html^> stand vorher ein an_%%i.log" Echo: Auswirkung gering. In der Anzeige wurde der Body bereits vor dem Text im Internet Explorer geschlossen.

Der Internet Explorer gehört aber zu den gutmütigen Anwendungen, die dennoch den Text korrekt anzeigen. Ohne Blick in den Quellcode merkt kein Schwein den Fehler.
Schlimmer: Der Sternenhimmelstuermer vererbte den Fehler durch Copy und Paste ins Plugin für die Exceldarstellung...was dieselben Konsequenzen in der Anzeige hat - nämlich keine, aber dennoch nicht stilistisch schön ist...

10.08.2012

Bug oder Verbesserung - Wie man es sieht, vielen anderen Softwareentwickler wäre dieser Fehler nicht aufgefallen. Der Sternenhimmelstuermer hat einen Doppelnamen für sein Benutzerkonto vergeben, der sich in den Pfaden des Betriebssystems spiegelt (C:\Users\Manfred Sternenhimmelstuermer\Desktop). Leider hat er vergessen, dass in der Indexsuche zu berücksichtigen, da er auf c:/ Probe, einem Pfad ohne Doppelnamen arbeitet (Warum eigentlich ? -Macht der Gewohnheit. So simuliert der Sternenhimmelstuermer zwei Arbeitsumgebungen - einmal ohne Doppelnamen im Benutzerkonto, einmal  mit. Sie glauben gar nicht, wieviele Batches im Internet beim Sternenhimmelstuermer  in der Arbeitsumgebung mit dem Doppelnamen  funktionslos sind: Keine Sorge, der Sternenhimmelstuermer wird keine Negativliste diesbezüglich veröffentlichen...Da würden einige "Profiseiten" ganz schön mies da stehen...)

Folge für Merlin: Die Indexsuche funktioniert nicht auf Desktop und Unterordnern mit Doppelnamen - eher eine Minderheit der User, aber ein einfach zu bereinigender Fehler:

for %%I in (.) do echo %%~sI  >pfad.txt
set destination=<pfad.txt


Der Sternenhimmelstuermer schafft nochmal ein Dokument mit dem Dos-konformen Pfad und gibt den nochmal kurz vor den For-Befehlen zurück. Es gibt For-Befehle die unabdingbar einen Dos-konformen Pfad benötigen wie z. B. der Befehl: 

for /f "delims=" %%i in ('dir %destination%*.doc /s /b /a-d') do @echo %%i>>pfadliste.log 

Der For Befehl schickt den Dir - Befehl geradewegs in eine DOS-Umgebung.

Das Dokument pfad.txt wird dann ein paar Zeilen später zerstört. Warum nicht gleich als Variabel übergeben? Hört sich blöd an, aus unbekannten Gründen funktioniert das nicht immer...der Sternenhimmelstuermer kann das nicht begründen, aber die eben genannte Methode funktioniert zu 100 %.

Wie dem auch sei, der Sternenhimmelstuermer passte das natürlich auch für die Excelindexerstellung an...



Impressum
Datenschutz