Datei beim Öffnen per Batch auf bestimmten Inhalt überprüfen, ggf. editieren, speichern und dann öffnen möglich?
Grüsst euch!
Bin bisher kein großer Programmierer, kann ja aber noch werden *g*, ein Anfang wäre evtl. mit der Lösung des folgenden Problemchens gemacht:
Ich habe verschiedene HPGL-Files, welche mit verschiedenen Programmen und Druckern/Plottern Probleme machen.
Nun schwebt mir vor, die Dateien vor, bzw. bei dem Öffnen, auf einen bestimmten Inhalt hin überprüfen zu lassen und evtl. einige Zeilen aus dem File löschen zu lassen.
Sollte in etwa wie folgt von statten gehen: Doppelklick auf die Datei (öffnet normaler Weise ja verknüpftes Programm) startet Routine die das File überprüft ob dort etwas ähnliches drin steht wie Begin Job....dann jede Menge ASCI.....und dann End Job.
Wenn dies nun vorhanden ist, sollte alles was zwischen, incl. des gesuchten Textes, Beginn Job bis End Job gelöscht werden und die Datei überschrieben werden. Anschliessend soll das damit verknüpfte Programm gestartet werden. Alternativ evtl noch eine Abfrage eingebaut werden, mit welchem der zur Auswahl stehenden Programme die Datei geöffnet werden soll.
Geht so etwas ...... ohne sich dabei ein Loch ins Knie bohren zu müssen????
Vielen Dank schon mal vorab.
SvennyW
Bin bisher kein großer Programmierer, kann ja aber noch werden *g*, ein Anfang wäre evtl. mit der Lösung des folgenden Problemchens gemacht:
Ich habe verschiedene HPGL-Files, welche mit verschiedenen Programmen und Druckern/Plottern Probleme machen.
Nun schwebt mir vor, die Dateien vor, bzw. bei dem Öffnen, auf einen bestimmten Inhalt hin überprüfen zu lassen und evtl. einige Zeilen aus dem File löschen zu lassen.
Sollte in etwa wie folgt von statten gehen: Doppelklick auf die Datei (öffnet normaler Weise ja verknüpftes Programm) startet Routine die das File überprüft ob dort etwas ähnliches drin steht wie Begin Job....dann jede Menge ASCI.....und dann End Job.
Wenn dies nun vorhanden ist, sollte alles was zwischen, incl. des gesuchten Textes, Beginn Job bis End Job gelöscht werden und die Datei überschrieben werden. Anschliessend soll das damit verknüpfte Programm gestartet werden. Alternativ evtl noch eine Abfrage eingebaut werden, mit welchem der zur Auswahl stehenden Programme die Datei geöffnet werden soll.
Geht so etwas ...... ohne sich dabei ein Loch ins Knie bohren zu müssen????
Vielen Dank schon mal vorab.
SvennyW
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 44032
Url: https://administrator.de/forum/datei-beim-oeffnen-per-batch-auf-bestimmten-inhalt-ueberpruefen-ggf-editieren-speichern-und-dann-oeffnen-44032.html
Ausgedruckt am: 23.12.2024 um 18:12 Uhr
13 Kommentare
Neuester Kommentar
Hallo SvennyW!
Das folgenden VBScript kann wie folgt verwendet werden:
Speichere es mit beliebigem Namen.vbs in einen Ordner Deiner Wahl (zB "C:\Prog\HPGL.vbs").
Gehe im Explorer unter "Extras / Ordneroptionen" zum Register "Dateitypen", wähle dort den Eintrag für "HPGL" aus und klicke auf "Erweitert".
Wähle die Aktion "open" und klicke auf "Bearbeiten..."
Trage als "Anwendung für diesen Vorgang" ein:
OK / OK / Schließen
Ab jetzt sollte beim Doppelklicken auf eine .HPGL-Datei das Script starten, wobei die ursprüngliche Datei als Sicherungskopie mit dem Zusatz ".bak" gespeichert wird. Für den Fall, dass keine Sicherungskopie gewünscht sein sollte, bitte die Anweisung im Code gegen Ende des Scripts befolgen!
Für die Bearbeitung der neue Datei kann aus den am Anfang des Scripts definierten Programmen gewählt werden. Anzupassen sind die Anzahl der Programme in der ersten Zeile (derzeit 3) sowie deren Beschreibungen und Pfade (analog zu den Beispielen). Die Programmnummer "0" ist für einen Abbruch der (Nach-)Bearbeitung reserviert. Die Nummer des Standardprogrammes ist bei "sDefault = " anzugeben.
Have fun!
bastla
P.S.: Meinem Knie geht's noch gut
Das folgenden VBScript kann wie folgt verwendet werden:
Speichere es mit beliebigem Namen.vbs in einen Ordner Deiner Wahl (zB "C:\Prog\HPGL.vbs").
Gehe im Explorer unter "Extras / Ordneroptionen" zum Register "Dateitypen", wähle dort den Eintrag für "HPGL" aus und klicke auf "Erweitert".
Wähle die Aktion "open" und klicke auf "Bearbeiten..."
Trage als "Anwendung für diesen Vorgang" ein:
WScript.exe "C:\Prog\HPGL.vbs" %1
OK / OK / Schließen
Ab jetzt sollte beim Doppelklicken auf eine .HPGL-Datei das Script starten, wobei die ursprüngliche Datei als Sicherungskopie mit dem Zusatz ".bak" gespeichert wird. Für den Fall, dass keine Sicherungskopie gewünscht sein sollte, bitte die Anweisung im Code gegen Ende des Scripts befolgen!
Für die Bearbeitung der neue Datei kann aus den am Anfang des Scripts definierten Programmen gewählt werden. Anzupassen sind die Anzahl der Programme in der ersten Zeile (derzeit 3) sowie deren Beschreibungen und Pfade (analog zu den Beispielen). Die Programmnummer "0" ist für einen Abbruch der (Nach-)Bearbeitung reserviert. Die Nummer des Standardprogrammes ist bei "sDefault = " anzugeben.
'HPGL.vbs
Dim sProg(3), sProgPath(3)
sProg(0) = "Abbruch"
sProg(1) = "Notepad" : sProgPath(1) = """C:\Windows\notepad.exe"""
sProg(2) = "Wordpad" : sProgPath(2) = """C:\Programme\Windows NT\Zubehör\wordpad.exe"""
sProg(3) = "HPGL-Konverter": sProgPath(3) = """C:\Programme\HPGLConverter\HPGLConverter.exe"""
sDefault = 1
sFile = WScript.Arguments(0)
sBegin = "Begin Job"
sEnd = "End Job"
sOldFile = sFile & ".bak"
If Instr(sOldFile, "\") Then
sOldFileName = Mid(sOldFile, InstrRev(sOldFile, "\") + 1)
Else
sOldFileName = sOldFile
End If
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(sOldFile) Then fso.DeleteFile(sOldFile)
Set oOldFile = fso.GetFile(sFile)
oOldFile.Name = sOldFileName
Set oOldFile = fso.OpenTextFile(sOldFile, 1)
Set oNewFile = fso.OpenTextFile(sFile, 2, True)
bKeep = True
Do While Not oOldFile.AtEndOfStream
sLine = oOldFile.ReadLine
If bKeep Then
sTempLine = sLine
Else
sTempLine = ""
End If
iPos = Instr(sLine, sBegin)
If iPos Then
sTempLine = Left(sLine, iPos -1)
bKeep = False
End If
If Not bKeep Then
iPos = Instr(sLine, sEnd)
If iPos Then
sTempLine = sTempLine & Mid(sLine, iPos + Len(sEnd))
bKeep = True
End If
End If
If sTempLine <> "" Then oNewFile.WriteLine sTempLine
Loop
oOldFile.Close
oNewFile.Close
'Um die Sicherungskopie zu löschen, in der nächsten Zeile das Apostroph am Anfang entfernen!
'fso.DeleteFile(sOldFile)
sProgText = ""
For i = 0 To UBound(sProg)
sProgText = sProgText & i & " - " & sProg(i) & vbCrLF
Next
Do
iWahl = CInt(InputBox(sProgText, "Bitte Programm wählen ...", sDefault))
Loop Until iWahl <= UBound(sProg)
If iWahl <> 0 Then
Set Sh = CreateObject("WScript.Shell")
Sh.Run sProgPath(iWahl) & " " & Chr(34) & sFile & Chr(34), 1 ,0
End If
Have fun!
bastla
P.S.: Meinem Knie geht's noch gut
Hallo SvennyW!
Fast hatte ich's befürchtet, dass es nicht ganz so einfach sein würde.
Aber ich werd mir schon (von Google) was einfallen lassen - kann aber ein paar Minuten dauern ...
Grüße
bastla
Fast hatte ich's befürchtet, dass es nicht ganz so einfach sein würde.
Mir scheint, Du hattest auch schon des Öfteren Berührungspunkte mit HPGL-Files?
Leider nein, sonst hätte ich schon gewusst, dass es mit Zeile einlesen / Zeile untersuchen / Zeile (bzw Teil der Zeile bis vor "Begin Job" oder auch Teil der Zeile nach "End Job" rausschreiben) nix wird. Vermutlich sind Zero-Bytes in den Files enthalten, und da VBScript vorrangig für das Handling von Textdateien ausgelegt ist, hakt es da ein wenig.Aber ich werd mir schon (von Google) was einfallen lassen - kann aber ein paar Minuten dauern ...
Grüße
bastla
Hallo Sven!
Bei mir habe ich (absichtlich für das Testen) den Typ "hplg" genannt (gab es noch nicht, und Vorsicht ist die Mutter der Porzellankiste), das Script in "C:\Prog" installiert und dazu folgende Einträge gefunden:
Ich komm leider derzeit nicht zum Testen und kann daher nicht mit Sicherheit sagen, ob das schon alle relevanten Einträge sind - falls ja, könnte man sie als ".reg"-Datei speichern und auf den Zielrechnern von Hand (Doppelklick und OK genügt) oder auch per Batch ("reg import") installieren.
Grüße
bastla
[Edit] Auf Variante mit "%1" geändert. [/Edit]
einige Programme finden die Datei nicht, was mit dem Fehler "f_open error 1" - " Datei nicht gefunden "G:\Progra~1\blabla~1\xyz.plt" kommentiert wird.
Ich vermute, dass manche Programme bei der Übergabe Probleme mit den langen Dateinamen haben. Ist das möglich dass es da Unterschiede von Programm zu Programm gibt?
Kann ich leider auch nicht sagen - Leerstellen sollten aber eigentlich nicht stören, da ich beim Sh.Run den Dateinamen unter Anführungszeichen [Chr(34)] setze ...Ich vermute, dass manche Programme bei der Übergabe Probleme mit den langen Dateinamen haben. Ist das möglich dass es da Unterschiede von Programm zu Programm gibt?
Dann noch eine ganz andere Frage zur Installation von diesem Thema:
Wäre es möglich, das ganze in einer Routine installieren zu lassen, welche auch gleich die Dateiverknüpfungen richtig setzt?
Sofern die Script-Datei auf jedem Rechner den gleichen Speicherort erhält, könnte man die Dateiverknüpfung aus der Registry exportieren und auf den Zielrechnern importieren. Die entsprechenden Einträge kannst Du über eine Suche nach "hpgl" finden.Wäre es möglich, das ganze in einer Routine installieren zu lassen, welche auch gleich die Dateiverknüpfungen richtig setzt?
Bei mir habe ich (absichtlich für das Testen) den Typ "hplg" genannt (gab es noch nicht, und Vorsicht ist die Mutter der Porzellankiste), das Script in "C:\Prog" installiert und dazu folgende Einträge gefunden:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.hplg]
@="hplg_auto_file"
[HKEY_CLASSES_ROOT\hplg_auto_file]
@=""
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
[HKEY_CLASSES_ROOT\hplg_auto_file\shell]
@=""
[HKEY_CLASSES_ROOT\hplg_auto_file\shell\open]
[HKEY_CLASSES_ROOT\hplg_auto_file\shell\open\command]
@="WScript.exe \"C:\\Prog\\HPGL.vbs\" \"%1\""
[HKEY_CLASSES_ROOT\hplg_auto_file\shell\open\ddeexec]
[HKEY_CLASSES_ROOT\hplg_auto_file\shell\open\ddeexec\Application]
@="HPGL"
[HKEY_CLASSES_ROOT\hplg_auto_file\shell\open\ddeexec\Topic]
@="System"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.hplg]
@="hplg_auto_file"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file]
@=""
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell]
@=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell\open]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell\open\command]
@="WScript.exe \"C:\\Prog\\HPGL.vbs\" \"%1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell\open\ddeexec]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell\open\ddeexec\Application]
@="HPGL"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hplg_auto_file\shell\open\ddeexec\Topic]
@="System"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.hplg]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.hplg\OpenWithList]
"a"="HPGL.vbs"
"MRUList"="ba"
"b"="notepad.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.hplg\OpenWithProgids]
"hplg_auto_file"=hex(0):
Grüße
bastla
[Edit] Auf Variante mit "%1" geändert. [/Edit]
Hallo Sven!
Kurze Tests in der Zwischenzeit haben ergeben:
Grüße
bastla
... Einträge aus der Registry, ..., bekommst Du die so bei der Suche ausgeworfen??? Oder wie machst Du das???
Einfach alles, was "verdächtig" erscheint, im "Verzeichnisbaum" markieren und mit "Datei / Exportieren..." in einzelne ".reg"-Dateien schreiben und dann mit einem Texteditor zusammenfügen (zur Sicherheit dafür sorgen, dass am Anfang "Windows Registry Editor Version 5.00" und am Ende 2 Leerzeilen in der fertigen Datei stehen).Kurze Tests in der Zwischenzeit haben ergeben:
- Die letzten 3 Keys oben sind wohl nicht erforderlich.
- Übertragen von XP auf XP: klappt
- Beim Übertragen von XP auf W2K wurde immer eine Umwandlung in kurze Dateinamen vorgenommen.
Echt super Sache!!!!
My pleasure.Grüße
bastla