Da ich keine Scriptsprache beherrsche, beschränken sich meine Scripting-Fähigkeiten darauf, Scripts aus dem Netz so zu modifizieren, dass sie mit in DOpus ausgewählten Dateien durch Klick auf einen Schalter funktionieren. Zu Übungszwecken habe ich ein paar einfache VB-Scripts, mit denen Text in Textdateien bearbeitet werden kann so konvertiert. Die meisten Vorlagen stammen aus dem Microsoft Technet Scripting Center.
Achtung: Zumindest bei allen Schaltern, die die Originaldateien durch Löschen oder Umbenennen verändern (Schalter 2), 3), 5), 6), 10) und 12)) empfehle ich ausdrücklich, mit Kopien bzw. Backups zu arbeiten, da die Rückgängig-Funktion mit diesen Codes nicht funktioniert! Zur Sicherheit funktionieren die meisten Schalter mit Hilfe einer editierbaren Liste von Dateiendungen nur mit Dateitypen, die reinen Text enthalten. Die Schalter 1), 4) und 11) funktionieren dagegen auch mit Binärdateien, da sie die Originaldateien nicht verändern.
Die Schaltercodes:
1) Lese Zeile n aus markierten Dateien
Der Schalter liest aus allen markierten Dateien die Zeile n aus (Zeilennummer wird in einem Dialog abgefragt; Vorgabe im Code ist 5) und gibt das Ergebnis in der Textdatei output.txt im Quellordner aus.
Code: Alles auswählen
Function OnClick(ByRef ClickData)
iLineNumber = DOpus.Dlg.GetString ("Zeilennummer eingeben:",5,,"Auslesen","Textzeile auslesen")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objOF = objFS.CreateTextFile("{alias|desktop}\output.txt")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath)
For i=1 To (iLineNumber-1)
objTS.SkipLine
Next
objOF.WriteLine objTS.Readline
Next
End Function
Der Schalter löscht die in einem Dialog abgefragte Anzahl Zeilen (Vorgabe 5) vom Anfang der ausgewählten Dateien.
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
iNumberOfLinesToDelete = DOpus.Dlg.GetString ("Zeilenanzahl eingeben:",5,,"OK","Zeilen vom Anfang löschen")
Set objFS = CreateObject("Scripting.FileSystemObject")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
For i=0 To UBound(arrLines)
If i > (iNumberOfLinesToDelete - 1) Then
objTS.WriteLine arrLines(i)
End If
Next
Next
End Function
Der Schalter löscht analog zu Schalter 2) eine Anzahl Zeilen vom Ende der ausgewählten Dateien.
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
iNumberOfLinesToDelete = DOpus.Dlg.GetString ("Zeilenanzahl eingeben:",5,,"OK","Zeilen vom Anfang löschen")
Set objFS = CreateObject("Scripting.FileSystemObject")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
iIndexToDeleteFrom = UBound(arrLines)- iNumberOfLinesToDelete + 1
For i=0 To UBound(arrLines)
If i < (iIndexToDeleteFrom) Then
objTS.WriteLine arrLines(i)
End If
Next
Next
End Function
Der Schalter kopiert den Inhalt aller markierten Dateien in eine neue Datei auf dem Desktop (/desktop\output.txt).
Code: Alles auswählen
Function OnClick(ByRef ClickData)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("{alias|desktop}\output.txt")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTextFile = objFSO.OpenTextFile(strFilePath)
strText = objTextFile.ReadAll
objTextFile.Close
objOutputFile.WriteLine strText
Next
objOutputFile.Close
End Function
Der Schalter fragt in 2 Dialogen zunächst den Suchtext ab und dann den Text der den Suchtext ersetzen soll. Wenn die zweite Abfrage leer bleibt wird der Suchtext gelöscht. Auch dieser Schalter funktioniert mit mehreren ausgewählten Dateien.
Code: Alles auswählen
Function OnClick(ByRef ClickData)
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
SearchText = DOpus.Dlg.GetString ("Suchtext eingeben:",,,"Suchen","Text suchen")
ReplaceText = DOpus.Dlg.GetString ("Ersetzen durch:",,,"Ersetzen","Text ersetzen")
Set fso = CreateObject("Scripting.FileSystemObject")
For each file in ClickData.Func.Command.files
strFilePath = file
text = fso.OpenTextFile(strFilePath).ReadAll
text = Replace(text, SearchText, ReplaceText)
fso.OpenTextFile(strFilePath, 2).Write text
Next
End Function
Der Schalter löscht mehrere Zeilen aus markierten Dateien. Die erste und letzte zu löschende Zeile werden in Dialogboxen abgefragt.
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
iStartAtLineNumber = DOpus.Dlg.GetString ("Erste zu löschende Zeile:",3,,"OK","Erste Zeile")
iEndAtLineNumber = DOpus.Dlg.GetString ("Letzte zu löschende Zeile:",7,,"OK","Letzte Zeile")
Set objFS = CreateObject("Scripting.FileSystemObject")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
For i=0 To UBound(arrLines)
If i < (iStartAtLineNumber-1) OR i > (iEndAtLineNumber-1) Then
objTS.WriteLine arrLines(i)
End If
Next
Next
End Function
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
For each file in ClickData.Func.Command.files
strFilePath = file
strNewContent = DOpus.GetClip
Set objTS = objFS.OpenTextFile(strFilePath,FOR_READING)
strContents = objTS.ReadAll
objTS.Close
Set objTS = objFS.OpenTextFile(strFilePath,FOR_WRITING)
objTS.WriteLine strNewContent
objTS.Write strContents
Next
End Function

Code: Alles auswählen
Const FOR_APPENDING = 8
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
strContent = DOpus.GetClip
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath,FOR_APPENDING)
objTS.Write vbCRLF & strContent
Next
End Function
Der Schalter fragt in einer Dialogbox die Zelennummer ab, nach der der Text eingefügt werden soll
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
strNewContent = DOpus.GetClip
iInsertAfterLineNumber = DOpus.GetString ("Zeile nach der Text eingefügt werden soll:",5,,"OK","Text einfügen")
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
arrLines = Split(strContents, vbNewLine)
For i=0 To UBound(arrLines)
If i = (iInsertAfterLineNumber-0) Then
objTS.WriteLine strNewContent
End If
objTS.WriteLine arrLines(i)
Next
Next
End Function
Der Schalter löscht den gesamten Textinhalt aus den ausgewählten Dateien
Code: Alles auswählen
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
Next
End Function
Der Schalter kopiert die Textinhalte aller ausgewählten Dateien, getrennt durch eine Leerzeile, in die Zwischenablage
Code: Alles auswählen
Function OnClick(ByRef ClickData)
Set objFSO = CreateObject("Scripting.FileSystemObject")
strClip = ""
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTextFile = objFSO.OpenTextFile(strFilePath)
strText = objTextFile.ReadAll
objTextFile.Close
strClip = strClip & strText & vbCRLF & vbCRLF
Next
DOpus.SetClip strClip
End Function
Der Schalter fragt einen Text-String ab und löscht alle Zeilen, die damit beginnen aus den ausgewählten Dateien
Code: Alles auswählen
Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
strCheckForString = UCase(DOpus.GetString ("Zeilen löschen, die mit diesem Text beginnen:","beispieltext",,"OK","Textzeilen löschen "))
ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
For each file in ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
For Each strLine In arrLines
If Not(Left(UCase(LTrim(strLine)),Len(strCheckForString)) = (strCheckForString)) Then
objTS.WriteLine strLine
End If
Next
Next
End Function
Der Schalter konvertiert alle .txt-Dateien in markierten Ordnern, sowie ausgewählte .txt-Dateien im aktuellen Ordner nach .docx.
Quelle: Script to convert .txt file to Word document (VBScript)
Code: Alles auswählen
'---------------------------------------------------------------------------------
' The sample scripts are not supported under any Microsoft standard support
' program or service. The sample scripts are provided AS IS without warranty
' of any kind. Microsoft further disclaims all implied warranties including,
' without limitation, any implied warranties of merchantability or of fitness for
' a particular purpose. The entire risk arising out of the use or performance of
' the sample scripts and documentation remains with you. In no event shall
' Microsoft, its authors, or anyone else involved in the creation, production, or
' delivery of the scripts be liable for any damages whatsoever (including,
' without limitation, damages for loss of business profits, business interruption,
' loss of business information, or other pecuniary loss) arising out of the use
' of or inability to use the sample scripts or documentation, even if Microsoft
' has been advised of the possibility of such damages.
'---------------------------------------------------------------------------------
Option Explicit
Dim Item
Dim objshell
Dim dlg
Dim i
Function OnClick(ClickData)
Set dlg = ClickData.Func.Dlg
dlg.message = "Stellen Sie bitte sicher, dass alle geöffneten Word Dokumente gespeichert sind, " &_
"klicken Sie dann 'OK' um fortzufahren"
dlg.title = "Warnung"
dlg.icon = "warn"
dlg.buttons = "OK|Abbrechen"
i= dlg.Show
If i = 1 Then
For Each Item In ClickData.func.sourcetab.selected
Call main
Next
End If
End Function
Sub main()
Dim TxtFilePath
TxtFilePath = Item
StopWordApp
Set objshell = CreateObject("scripting.filesystemobject")
If objshell.FolderExists(TxtFilePath) Then 'Check if the object is a folder
Dim flag,FileNumber
flag = 0
FileNumber = 0
Dim Folder,DocFiles,DocFile
Set Folder = objshell.GetFolder(TxtFilePath)
Set DocFiles = Folder.Files
For Each DocFile In DocFiles 'loop the files in the folder
FileNumber=FileNumber+1
TxtFilePath = DocFile.Path
If GetWordFile(TxtFilePath) Then 'if the file is text file, then convert it
ConvertTxtToWord TxtFilePath
flag=flag+1
End If
Next
Set dlg = DOpus.Dlg
dlg.Window = DOpus.Listers(0)
dlg.message = "Es befinden sich insgesamt " & FileNumber & " Dateien im Ordner." & vbCrLf & "Es wurden " &_
flag & " '.txt'-Dateien In Word-Dokumente konvertiert."
dlg.title = "Warnung"
dlg.icon = "info"
dlg.buttons = "OK"
i= dlg.Show
Else
If GetWordFile(TxtFilePath) Then 'if the object is a file,then check if the file is a text file.if that, convert it
ConvertTxtToWord TxtFilePath
End If
End If
End Sub
Function ConvertTxtToWord(TxtFilePath)
Dim objshell,ParentFolder,BaseName,wordapp,doc,WordFilePath,objDoc
Dim objSelection
Set objshell= CreateObject("scripting.filesystemobject")
ParentFolder = objshell.GetParentFolderName(TxtFilePath) 'Get the current folder path
BaseName = objshell.GetBaseName(TxtFilePath) 'Get the text file name
WordFilePath = parentFolder & "\" & BaseName & ".docx"
Dim objWord
Set objWord = CreateObject("Word.Application")
Set objDoc=objWord.Documents.Add()
With objWord
.Visible = False
End With
Set objSelection=objWord.Selection
objSelection.InsertFile TxtFilePath
objDoc.saveas(WordFilePath)
objDoc.close
objWord.Quit
End Function
Function GetWordFile(TxtFilePath) 'This function is to check if the file is a '.txt' file
Dim objshell
Set objshell= CreateObject("scripting.filesystemobject")
Dim Arrs ,Arr
Arrs = Array("txt")
Dim blnIsDocFile,FileExtension
blnIsDocFile= False
FileExtension = objshell.GetExtensionName(TxtFilePath) 'Get the file extension
For Each Arr In Arrs
If InStr(UCase(FileExtension),UCase(Arr)) <> 0 Then
blnIsDocFile= True
Exit For
End If
Next
GetWordFile = blnIsDocFile
Set objshell = Nothing
End Function
Function StopWordApp 'This function is to stop the Word application
Dim strComputer,objWMIService,colProcessList,objProcess
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Get the WinWord.exe
Set colProcessList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Process WHERE Name = 'Winword.exe'")
For Each objProcess In colProcessList
'Stop it
On Error Resume Next
objProcess.Terminate()
Next
End Function
Call main
14) Dateien aus einer Liste mit Dateinamen in einer Textdatei auswählen
Der Schalter liest Dateinamen (Name mit Dateiendung; ein Name pro Zeile) aus einer Textdatei aus und wählt die Dateien aus. Textdatei und auszuwählende Dateien müssen sich im aktuellen Ordner befinden.
Code: Alles auswählen
Function OnClick(ByRef ClickData)
ClickData.Func.Command.RunCommand("Select NONE")
Set objFS = CreateObject("Scripting.FileSystemObject")
i = 0 : ReDim Preserve Zeile(i)
For Each file In ClickData.Func.Command.files
strFilePath = file
Set objTS = objFS.OpenTextFile(strFilePath)
Do While Not (objTS.atEndOfStream)
i = UBound( Zeile ) + 1 : ReDim Preserve Zeile(i) : Zeile(i) = objTS.Readline
ClickData.Func.Command.RunCommand("Select " & """" & Zeile(i) & """" & " EXACT")
Loop
Next
End Function
Code: Alles auswählen
Clipboard COPYNAMES=nopaths
Clipboard PASTE AS Dateiliste.txt