FTP-Now!
Zielsetzung
Nach dem Editieren einer oder mehrerer HTML-Seiten werden diese mit nur
einem Klick auf den Server geladen.
Realisierung
Ein VBScript startet mittels cmd
das Programm ftp und erzeugt eine Liste
der Dateien auf dem Server. Aus allen Dateien im Arbeitsverzeichnis werden
diejenigen rausgesucht, die nicht in der Serverliste vorkommen oder sich
in der Größe unterscheiden. Diese werden wieder per ftp
an den Server gesendet.
'FTP-Now! v1.2 (c) 2009 F.Perder, www.chfp.de/skripte
' *** SETTINGS ***
myFTPServer="www.server.de"
myRemotePath="."
myUsername="anonymous"
myPassword=ASK
' *** AUSNAHMEN (nicht auf den Server kopieren) ***
ausnahmen=array(_
"!temp.htm",_
"WS_FTP.LOG",_
_
"ftp-now!.ftp","ftp-now!.vbs")'Weitere Einträge
- nicht ändern!
' *** Programmstart ***
'(Wenn das Kennwort jedesmal eingegeben werden soll, bitte myPassword=ASK
setzen.)
function ASK
ASK=inputbox("Server: "&myFTPServer&vbNewLine&_
"Benutzername: "&myUsername&vbNewLine&_
"Zielverzeichnis: "&myRemotePath&vbNewLine&_
vbNewLine&"Bitte FTP-Kennwort eingeben:","FTP-Now!","")
if ASK = cancel then wscript.quit
end function
'Server-Listing erstellen.
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objTextStream=objFSO.CreateTextFile("ftp-now!.tmp")
objTextStream.Write myUsername&vbNewLine
objTextStream.Write myPassword&vbNewLine
objTextStream.Write "cd "&myRemotePath&vbNewLine
objTextStream.Write "dir"&vbNewLine
objTextStream.Write "bye"
objTextStream.Close
set ws = CreateObject("Wscript.shell")
ws.run "cmd /c ftp -s:ftp-now!.tmp "&myFTPServer&"
> ftp-now!.ftp",,1
objFSO.getFile("ftp-now!.tmp").Delete
'Server-Listing einlesen.
'Zeilen zwischen 150 ("Opening ASCII mode data connection.")
'und 226 ("Transfer complete. Closing data connection.") speichern.
Set objFile = objFSO.OpenTextFile("ftp-now!.ftp",1)
dim zeilen(999)
int i=0
dat=false
Do
zeile = objFile.ReadLine
if left(zeile,3)="226" then dat=false
if dat and left(zeile,1)<>"d" then
i=i+1
if i>999 then msgbox "Server-Listing zu lang!",,"Fehler"
: Wscript.quit
zeilen(i)=zeile
end if
if left(zeile,3)="150" then dat=true
Loop Until objFile.AtEndOfStream
objFile.Close
if i<1 then msgbox "Anmeldung fehlgeschlagen.",,"Fehler"
: Wscript.quit
'Zeilen in Dateiname und -größe umwandeln.
dim datei1(999)
dim groesse1(999)
for n=1 to i
datei1(n)=mid(zeilen(n),56,len(zeilen(n))-56)
groesse1(n)=ltrim(mid(zeilen(n),29,13))
next
'Kopierliste erstellen.
set lok=objFSO.getfolder(".")
dim kopierliste(999)
int k=0
for each file in lok.files
datei2=file.name
groesse2=CStr(file.size)
kopieren=true
for n=1 to i
if datei2=datei1(n) and groesse2=groesse1(n)
then kopieren=false
next
for n=0 to ubound(ausnahmen)
if datei2=ausnahmen(n) then kopieren=false
next
if kopieren then
k=k+1
if k>999 then msgbox "Kopierliste zu lang!",,"Fehler"
: Wscript.quit
kopierliste(k)=datei2
end if
next
if k<1 then msgbox "Keine Dateien ergänzt.",,"FTP-Now!"
: Wscript.quit
'Upload
ausgabe="Nachfolgende "&k&" Dateien senden?"&vbNewLine'&"Server-Zielverzeichnis:
"&myRemotePath&vbNewLine
set objTextStream=objFSO.CreateTextFile("ftp-now!.tmp")
objTextStream.Write myUsername&vbNewLine
objTextStream.Write myPassword&vbNewLine
objTextStream.Write "cd "&myRemotePath&vbNewLine
objTextStream.Write "binary"&vbNewLine
for n=1 to k
ausgabe=ausgabe&vbNewLine&kopierliste(n)
objTextStream.Write "send """&kopierliste(n)&""""&vbNewLine
next
objTextStream.Write "bye"
objTextStream.Close
weiter = MsgBox(ausgabe, vbQuestion+vbYesNo, "FTP-Now!")
if weiter=vbYes then ws.run "cmd /c ftp -s:ftp-now!.tmp "&myFTPServer,,1
objFSO.getFile("ftp-now!.tmp").Delete
|