' Script: hamuucp.vbs ' Letzte Änderung: 11.11.2000 ' Autor: Andreas Vehrenberg ' ' Dieses Script holt uucp-Batches via FTP vom Server und füttert den Hamster damit ' ' Ablauf: ' - Download und Löschen der Batches vom Server mit FTP.EXE (DOS) ' - Entfernen der ersten Zeile "#! *unbatch" aus den Batches ' - Umbenennen der uucp-Batches in DOS-kompatible Dateinamen ' - Unzippen der Batches mit SZIP.EXE ' - Füttern des Hamsters per NewsImport ' - Löschen der uucp-Batches ' ' Voraussetzungen: ' - Existenz von FTP.EXE (ist bei WinXX üblicherweise dabei) ' - Existenz von SZIP.EXE ' ' ------------- User-Variablen inifile = "hamuucp.ini" titel = "UUCP-News" scrfile = "getuucp.scp" firstline = "unbatch" & vbLF dim uucpdir, locDir, server, sUser, sPass, ftpdir ' ------------- set wshshell = CreateObject("WScript.Shell") set fs = CreateObject("Scripting.FileSystemObject") set hamster = CreateObject("Hamster.App") ' Programmstart --------------------------------------------------------- inichk download ftpdel entpacken loeschen Wscript.Quit ' Programm-Ende ' Subs ------------------------------------------------------------------- sub inichk set verz = fs.GetFolder(".") locDir = verz.Path & "\" if fs.fileExists(locDir & inifile) then set datei = fs.OpenTextFile(locDir & inifile) uucpdir = datei.ReadLine locDir = datei.ReadLine server = datei.ReadLine sUser = datei.ReadLine ftpdir = datei.ReadLine datei.Close else do uucpdir = inputBox("Verzeichnis für uucp-Batches?" & vbCRLF & vbCRLF _ & "ACHTUNG: Dateien in diesem Verzeichnis werden" & vbCRLF _ & "von HAMUUCP gnadenlos überschrieben und gelöscht!", _ titel, "uucp") if uucpdir = "" then abbruch end if if not fs.FolderExists(uucpdir) then ok = msgBox("Verzeichnis " & locdir & uucpdir & _ " existiert nicht. Erstellen?", vbYesNo, titel) if ok = vbYes then set vrz = verz.SubFolders set vz = vrz.Add(uucpdir) else abbruch end if else ok = msgBox("Verzeichnis " & locdir & uucpdir & _ " existiert bereits. Trotzdem verwenden?" & vbCRLF & vbCRLF _ & "ACHTUNG: Dieses Verzeichnis bitte ausschließlich für" & vbCRLF _ & "den Gebrauch mit HAMUUCP.VBS reservieren!", vbYesNo, titel) end if loop until ok = vbYes if right(uucpdir,1)="\" then uucpdir = left(uucpdir,len(uucpdir)-1) end if server = inputBox("Name des FTP-Servers?", titel) if server = "" then abbruch end if sUser = inputBox("User-Kennung?", titel) if sUser = "" then abbruch end if set winenv = wshShell.Environment("process") ftpdir = inputBox("In welchem Verzeichnis liegt FTP.EXE?", titel, _ winenv("windir")) if ftpdir = "" then abbruch elseif right(ftpdir,1) <> "\" then ftpdir = ftpdir & "\" end if set datei = fs.CreateTextFile(locDir & inifile, True) datei.WriteLine(uucpdir) datei.WriteLine(locDir) datei.WriteLine(server) datei.WriteLine(sUser) datei.WriteLine(ftpdir) datei.Close end if end sub sub download sPass = inputBox("Bitte Passwort für FTP-Access eingeben!", titel) if sPass = "" then abbruch end if set datei = fs.CreateTextFile(locDir & scrfile, True) datei.WriteLine(sUser) datei.WriteLine(sPass) datei.WriteLine("binary") datei.WriteLine("cd /D.") datei.WriteLine("lcd " & locDir & uucpdir) datei.WriteLine("mget *.*") datei.WriteLine("cd /C.") datei.WriteLine("mdelete *.*") datei.WriteLine("close") datei.WriteLine("quit") datei.Close cmmd = ftpdir & "ftp.exe -i -s:" & locdir & scrfile & " " & server wshshell.run cmmd, 1, True fs.DeleteFile locdir & scrfile end sub sub ftpdel ' dient nur dem Zweck, das Risiko von "mdelete *.*" zu vermeiden, einen Batch zu löschen, ' der erst nach "mget *.*" generiert wurde set uucpfolder = fs.GetFolder(uucpdir) scrstr = sUser & vbCRLF & sPass & vbCRLF & "cd /D." & vbCRLF for each datei in uucpfolder.Files scrstr = scrstr & "delete " & datei.Name & vbCRLF next scrstr = scrstr & "close" & vbCRLF & "quit" & vbCRLF set scrdat = fs.CreateTextFile(locDir & scrfile, True) scrdat.Write(scrstr) scrdat.Close cmmd = ftpdir & "ftp.exe -i -s:" & locdir & scrfile & " " & server wshshell.run cmmd, 1, True fs.DeleteFile locdir & scrfile end sub sub entpacken set uucpfolder = fs.GetFolder(uucpdir) uucpdir = uucpdir & "\" dnr = 1 pullcnt = 0 impcnt = 0 for each datei in uucpfolder.Files if datei.name = "uucp1.sz" then exit for end if ' strip first line from uucp-batch set hdl = fs.OpenTextFile(uucpdir & datei.name) inhalt = hdl.Read(datei.size) ' geht nicht mir ReadAll!! hdl.Close ix = instr(inhalt,firstline) if ix > 0 then inhalt = right(inhalt,len(inhalt)-ix-7) end if set hdl = fs.CreateTextFile(uucpdir & datei.name, True) hdl.Write inhalt hdl.Close ' rename for dos-use dosdatei = "uucp" & cstr(dnr) & ".sz" datei.name = dosdatei ' uucp-Batch entpacken ' HIER GEGEBENENFALLS AN ANDERE ENTPACKER ANPASSEN ' ' Aufruf bei SZIP-Kompression wshshell.run "szip -d " & uucpdir & dosdatei & " " & locDir _ & "temp.txt", 0, True ' Aufruf bei GZIP-Kompression ' wshshell.run "command /c gzip -cd " & uucpdir & dosdatei _ ' & " >" & locDir & "temp.txt", 0, True ' Aufruf bei BZIP2-Kompression ' wshshell.run "command /c bzip2 -cd " & uucpdir & dosdatei _ ' & " >" & locDir & "temp.txt", 0, True ' ' rnews-Batch einlesen set hdl = fs.OpenTextFile(locDir & "temp.txt") inhalt = hdl.ReadAll hdl.Close ' Newsartikel importieren iFB = 1 do firstbyte = instr(iFB,inhalt,vbLF)+1 artsize = clng(mid(inhalt, iFB + 9, firstbyte - iFB - 10)) iFB = firstbyte + artsize artikel = mid(inhalt,firstbyte,artsize) ' LF in CRLF umwandeln ix = 0 do ix = instr(ix+2,artikel,vbLF) if ix >0 then artikel = left(artikel,ix-1) & vbCRLF & right(artikel,len(artikel)-ix) end if loop while ix>0 ok = hamster.NewsImport(artikel, "", false, false) If ok Then impcnt = impcnt + 1 End If pullcnt = pullcnt + 1 Loop While iFB < Len(inhalt) dnr = dnr + 1 Next msgBox "News-Pull: " & pullcnt & " Artikel" & vbCRLF _ & "Importiert: " & impcnt & " Artikel", vbOkOnly, titel End Sub Sub loeschen ok = msgBox("uucp-Batches löschen?" & vbCRLF _ & "ACHTUNG: Bei Bestätigung wird " & locdir & uucpdir & vbCRLF _ & "vollständig geleert!", vbYesNo, titel) if ok = vbYes then fs.DeleteFile uucpdir & "*.*" end if end sub sub abbruch msgBox "Abbruch aufgrund unvollständiger Eingaben.", vbOKOnly, titel wscript.quit end sub