Verschiedene kleine VB-Skripte
Digicam-Kopier-Skript
Für meine Computertechnisch nicht so erfahrene Familie habe
ich ein kleines WSH-Skript gebastelt, welches automatisch in allen
Laufwerken nach einer Digicam (konkret nach einem Laufwerk mit
Unterverzeichnis
\DCIM)
sucht und alle Dateien in den verschiedenen Unterverzeichnissen von
\DCIM in
einen Ordner
(z.B.) C:\Digicam\0510
Neuer Ordner kopiert. Der
Ordnername kann eingegeben werden in einer Eingabemaske:
Daneben können auch Jahr und Monat geändert werden...
Während dem Verschieben der Dateien von der Digicam auf die
Harddisk werden die Bilddateien angezeigt und am Schluss des
Kopiervorgangs wird ein Explorer-Fenster des Bildverzeichnisses
geöffnet und die Anzahl kopierter Dateien ausgegeben.
Keine Wahnsinnsentwicklung, aber durchaus praktisch! Zudem zeigt sie,
wie man mit Visual Basic Dialoge erstellen und in VB-Script einbinden
kann! Die benötigte Ocx-Datei kann zum Beispiel mit der CCE
(Control-Creation-Edition) von Visual-Basic 5.0 erstellt werden,
diese eingeschränkte Version, welche keine
Exe-Dateien, aber Ocx-Dateien ausgibt, kann von der Microsoft-Homepage
heruntergeladen werden.
Installation
- Download von Digicam_Kopieren.zip
(20 kB)
- Entzippen in einen Ordner
- Auf der Kommandozeile mit
"regsvr32 DigicamKopieren.ocx" die benötigte Ocx-Datei
registrieren.
- Mit "WScript
DigicamKopieren.vbs" oder durch Doppelklicken auf DigicamKopieren.vbs
im Explorer wird das Skript gestartet. Natürlich kann auch
eine Verknüpfung zum Skript erstellt werden.
Digicam-Synchronisierungs-Skript
Da ich leider an meinem etwas altersschwachen Laptop nur einen
USB1.1-Anschluss habe, ist die Datentransfer-Rate zu meiner externen
Harddisk nicht gerade berauschend. Um trotzdem regelmässig
sicherungskopien meiner Digicam-Bilder zu machen, habe ich ein kleines
Skript geschrieben, welches die Ordnerstruktur in "C:\Digicam" und
"G:\Digicam Sichern" vergleicht und nicht übereinstimmende
Ordner gelöscht, resp. Hinüberkopiert. Das Skript
führt dabei NUR Änderungen an der externen Harddisk
und nicht an der Laptop-Disk durch. Vor jedem
Kopier-/Löschvorgang erscheint eine Abfrage, ob dies wirklich
gewünscht ist.
Wenn die Ordnerstruktur übereinstimmt, vergleicht das Skript
die Anzahl Dateien in den Ordnern und Fragt bei unterschiedlicher
Anzahl, ob der Ordner auf der externen Harddisk ersetzt werden soll.
Die Sache ist allerdings nicht sehr klever gelöst, so wird
wenn ein Ordner auf der Laptop-Harddisk umbenannt wird, vom Skript der
Ordner auf der exteren Harddisk zuerst gelöscht um dann wieder
vom Laptop kopiert zu werden.
Da jeder Vorgang mittels WScript.Echo ausgegeben wird, sollte das
Skript von der Kommandozeile aus gestartet werden, da sonst eine
Message-Box-Flut der Bildschirm überdeckt ;-)
synchr_digicam.vbs
(3 kB)
Menu-Änderung der
Homepage
Da ich keine Ahnung von Php / CGI habe (und auch wenig Lust
verspüre, mich hineinzuarbeiten), habe ich meine Homepage in
reinem HTML aufgebaut. Dies hat den grossen Nachteil, dass jede
einzelne Seite editiert werden muss, wenn die Menustruktur
verändert wird. Mit dem Menu.vbs-Skript kann dies etwas
Beschleunigt werden:
In der HTML-Datei wird vor und nach dem Menu ein Kommtar-Tag
eingefügt:
<!--
Menu -->
<div class="menu1"><a
href="index.html">Willkommen!</a></div>
<div class="menu2"><a
href="home_ich.html">Ich</a></div>
....
<!-- Menu -->
Das Skript lies nun die Datei
Menu.txt
(1 kB) mit dem veränderten Menu ein und ersetzt in allen
HTML-Dateien eines Ordners den Bereich zwischen den beiden
Kommentaren.
Ein Schnell-Hack... scheint aber zu funktionieren ;-) Dieses Skript
lädt zum Abändern ein... in dieser Form wird kaum
jemand es
gebrauchen können!
Menu.vbs
(1 kB)
Snippets...
sind kleine, aber oft verwendete Brocken VBScript, die in der hier
präsentierten Form nicht lebensfähig sind, aber eine
gute
Grundlage für weitere Entwicklungen darstellen. (Siehe auch die
auf der
www.microsoft.com erhältliche Dokumentation zum
Windows-Script-Host)
Da ich vergesslich bin, verwende ich in meinen Skripten immer die
explizite Deklaration von Variablen. Die Variabeln müssen
somit
deklariert werden, dafür werden Druckfehler schneller erkannt!
Dateien Schreiben/Lesen
Const ForReading = 1
Const ForWriting = 2
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set Datei=MyFSO.OpenTextFile("Eingabe.txt", ForReading)
Zeile=Datei.ReadLine()
Alles=Datei.ReadAll()
Set Datei=MyFSO.OpenTextFile("Ausgabe.txt", ForWriting,True) '3.
Arg.=True erstellt eine neue Datei
Datei.Write(DateiNeu)
Datei.Close
Rekursiv von einem Ordner
ausgehend alle Dateien bearbeiten
Option Explicit
Dim MyFSO
Set MyFSO = CreateObject("Scripting.FileSystemObject")
ScanDir("C:\Digicam")
Sub ScanDir(ScanPfad)
Dim PathObject, FileObject, FileNow,
SubFolders,
SubFoldersNow
Set PathObject=MyFSO.getFolder(ScanPfad)
Set
FileObject=PathObject.Files
For Each FileNow In FileObject
DoFile(FileNow)
Next
Set SubFolders=PathObject.SubFolders
For Each SubFoldersNow in SubFolders
ScanDir(SubFoldersNow.ParentFolder+"\"+ SubFoldersNow.Name)
Next
End Sub
Sub DoFile(Datei)
WScript.ECHO Datei.Name&"
"&Datei.DateLastModified&" "&Datei.Path
End Sub
Bild mit dem Internet-Explorer
Speichern
Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = WScript.CreateObject("WScript.Shell")
IE.Visible = 1
IE.Navigate "http://www02.wdr.de/webcam/cam1.jpg"
Do While IE.busy
Loop
If Not Left(IE.Document.title,8)="HTTP 404" Then
WshShell.SendKeys "%D" ' Alt-D
"Datei"
WshShell.SendKeys
"u" ' u "Speichern
unter"
WshShell.SendKeys "C:\test.jpg"
'Pfad eingeben
WshShell.SendKeys "~" ' Enter
Do While IE.busy
Loop
End If
Exif-Informationen auslesen
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("C:\Dokumente und
Einstellungen\Simon Bruderer\Eigene Dateien\wsh\exif auslesen")
Set objFolderItem = objFolder.ParseName("P2210002.JPG")
if (not objFolderItem Is Nothing) then
for i=0 to 30
WScript.Echo CStr(i)+" "+objFolder.GetDetailsOf(objFolderItem,
i)
next
end if
Mailen mittels CDO
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Subject"
objMessage.Sender = "ich@bluewin.ch"
objMessage.To = "fritzli@test.ch"
objMessage.TextBody = "Text"
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
"test.mail.ch"
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "ich"
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/sendpassword") =
"31415926"
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")
= 10
objMessage.Configuration.Fields.Item
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
objMessage.Configuration.Fields.Update
objMessage.Send
(siehe auch
www.paulsadowski.com/WSH/cdo.htm)
Einzeiler ohne Kommentar
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.MoveFile "C:\Ordner_A\Datei.txt", "D:\Ordner_B\Datei.txt"
FSO.CopyFile "C:\Ordner_A\Datei.txt", "D:\Ordner_B\Datei.txt"
If FSO.FileExists("c:\Autoexec.bat") Then WScript.Echo "C:\...
existiert"
WScript.Echo "Zeile 1"+Chr(10)+"Zeile 2"
WScript.sleep(1000)
WScript.Quit 1
[... zu Ergänzen ...]