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:

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

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"^>^ ^ ^ ^</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...