Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FTP Upload per Batchscript (https://www.delphipraxis.net/153748-ftp-upload-per-batchscript.html)

Luckie 14. Aug 2010 17:52


FTP Upload per Batchscript
 
Kennt jemand eine Möglichkeit per VBScript eine Datei auf einen Server hochzuladen? Mit Google habe ich bisher nur wege gefunden die ein externes ActiveX Object nutzen. Gibt es auch eine Möglichkeit nur mit Windows Bordmitteln?

Namenloser 14. Aug 2010 18:46

AW: FTP Upload per VBScript
 
Könntest du nicht einfach das Kommandozeilen-FTP-Program aufrufen, das bei Windows mitgeliefert wird?

himitsu 14. Aug 2010 19:24

AW: FTP Upload per VBScript
 
Der IE/Explorer kann FTP (OK, ab IE7 gibt es manchmal Progbleme und nur Lesezugriff, aber theoretisch geht es)

ftp://username:password@url/pfad

Und konnte man nicht auch irgendwo im Explorer Server/FTP-Verbindungen als Verzeichnis anlegen? (irgendwo in dem ganzen Netzwerkzeugs)


Und wie wäre es mit FileZillaPortable?

Luckie 14. Aug 2010 20:19

AW: FTP Upload per VBScript
 
Wie gesagt, ich wollte es mit Windows Bordmitteln machen.

Den Konsolen FTP-Client nutze ich zur Zeit nur leider muss man da das Passwort im Klartext in dem Skript hinterlegen. Das stört mich schon die ganze Zeit. Mit einem VB Script könnte ich eine Passwortabfrage einbauen und könnte das ein oder andere komfortabler lösen, wie zum Beispiel eine Dateiauswahl usw. Denn zur Zeit werden immer alle Dateien per FTP als Backup übertragen:
Code:
open server.de
benutzer
passowrt2
hash
binary
cd html/Privat/backup
lcd "d:\Michael\eigene Dateien"
put "Abrechnungen.7z"
put "Briefe.7z"
put "Tagebuch2010.7z"
put "Dokumente.7z"
close
quit
Da die Dateien mittlerweile recht groß sind, dauert dies unnötig lange, wenn ich Dateien hochladen, die sich nicht geändert haben.

jfheins 14. Aug 2010 21:39

AW: FTP Upload per VBScript
 
Du kannst ja mal die Windows Powershell ausprobieren ;)

Hab gerade mal ein bisschen rumprobiert, und wenn man das hier ausführt bekommt man schonmal n DirectoryListing :-D
Code:
$x = [System.Net.FtpWebRequest]::Create("ftp://user:pwd@server.de")
$x.method = [System.Net.WebRequestMethods+Ftp]::ListDirectory
$y = [net.ftpwebresponse]$x.getresponse()
$z = (new-object IO.Streamreader $y.GetResponseStream()).readtoend()
$z
Das Passwort vorher abzufragen überlasse ich jetzt mal dem geneigten Leser :mrgreen:

Luckie 15. Aug 2010 11:40

AW: FTP Upload per VBScript
 
Ach du meine Güte. Sieht für mich ziemlich unverständlich aus, was da passiert.

jfheins 15. Aug 2010 12:44

AW: FTP Upload per VBScript
 
Äh ja okay, ich hab das halt so (ohne Vorkenntnisse) zusammengeschrieben *g*

Die PowerShell basiert auf dem .net Framework und ist dadurch deutlich mächtiger als die alte Kommandozeile. Mit ein bisschen Gewöhnung klappt das schon ;)

Was passiert: Es wird ein FtpWebRequest erstellt (http://msdn.microsoft.com/de-de/libr...od(VS.80).aspx) und festgelegt, was passieren soll. Anfrage wird abgesendet und die Antwort (die als Stream vorliegt) in einen String konvertiert.

In C# sieht das so aus:
PHP-Quellcode:
 var x = FtpWebRequest.Create("ftp://user:pwd@example.com");
            x.Method = WebRequestMethods.Ftp.ListDirectory;
            var resp = x.GetResponse() as FtpWebResponse;
            var answer = new StreamReader(resp.GetResponseStream()).ReadToEnd();
            Console.WriteLine(answer);
Vielleicht ist das etwas verständlicher :)

Neumann 15. Aug 2010 13:25

AW: FTP Upload per VBScript
 
Hallo,

bin vor kurzem mal auf AutoIT gekommen, eine Scriptsprache zur Automatisierung von Windows. Ist relativ einfach, es gibt einen GUI-Builder (sieht aus wir ein extrem abgespecktes Delphi 7) und Compiler dafür der Exe-Dateien erzeugt.

Gruß

Ralf

Luckie 15. Aug 2010 16:36

AW: FTP Upload per VBScript
 
Danke, ich miss mir das noch mal durch den Kopf gehen lassen. Eventuell schreibe ich mir auch ein kleines Programm in Delphi oder C#.

Luckie 16. Aug 2010 15:45

AW: FTP Upload per VBScript
 
Ok, dann mal anders. Gibt es bei dem Script für die ftp.exe
Code:
open server.de
benutzer
passwort
hash
binary
cd html/Privat/backup
lcd "d:\Michael\eigene Dateien"
put "Abrechnungen.7z"
put "Briefe.7z"
put "Tagebuch2010.7z"
put "Dokumente.7z"
close
quit
eine Möglichkeit das Passwort abzufragen, so dass man es nicht hardcodieren muss?

jfheins 16. Aug 2010 16:02

AW: FTP Upload per VBScript
 
Du könntest das in eine Batchdatei verfrachten (oder isses da schon drin?) und dann so ungefähr abfragen:
Code:
@echo off
SET /P x=Bitte Passwort eintippen:
echo %x%
pause
Bzw. erst in einer Batchdatei abfragen, dann eine Datei mit den befehlen ins temp Verzeichnit, ftp.exe mit der -s Option starten und dann die Dstei wieder löschen :stupid:

Luckie 16. Aug 2010 19:03

AW: FTP Upload per VBScript
 
Ich habe eine Batch-Datei mit folgendem Inhalt:
Code:
ftp /s:backup.ftp
Und die backup.ftp enthält obigen Code.

jfheins 16. Aug 2010 20:00

AW: FTP Upload per VBScript
 
Okay, also hier ein Lösung mit dem Batchfile.
Es wird eine (temporäre) Datei geschriben, die dann an das FTP Programm übergeben wird. Danach wird die Datei wieder gelöscht.
das Passwort ist also kurz auf der Festplatte, aber nicht permanent ;)
Code:
@echo off
SET /P x=Bitte Passwort eintippen:
echo open server.de> x.txt
echo username>> x.txt
echo %x%>> x.txt
echo hash>> x.txt
echo binary>> x.txt
echo cd />> x.txt
echo dir>> x.txt
echo close>> x.txt
echo quit>> x.txt
ftp /s:x.txt
del x.txt
pause
keine Leerzeichen vor den ">>" einfügen - zummindest nicht beim Passwort ;)

Grausig anzuschauen, aber es geht :mrgreen:

Luckie 17. Aug 2010 09:11

AW: FTP Upload per VBScript
 
Genial. Auf die Idee eine Datei temporär zu schreiben war ich auch schon gekommen, nur das man das auch mit Echo machen kann, war mit entfallen. Besten Dank. Das ist die Lösung.

Luckie 18. Aug 2010 21:21

AW: FTP Upload per VBScript
 
Inklusive Menü sieht das ganze jetzt so aus:
Code:
echo off
cls
echo FTP Backup Script
echo =================
echo.
echo Zugangsdaten fuer zeus03.de
echo ----------------------------
set /P user="Benutzer: "
set /P pw="Passwort: "
echo.
rem Menü
:MENU
if EXIST script.ftp del script.ftp
echo Dateiauswahl
echo ------------
echo [1] Abrechnungen
echo [2] Briefe
echo [3] Dokumente
echo [4] Privat
echo [5] Tagebuch
echo [6] Alle
echo [0] Beenden
echo.

set asw=0
set /P asw="Auswahl: "

if %asw%==0 goto :EOF
if %asw%==1 goto ABR
if %asw%==2 goto BRIEFE
if %asw%==3 goto DOKS
if %asw%==4 goto PRIVAT
if %asw%==5 goto TAGEBUCH

:ABR
echo Uebtrage Abrechnungen auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Abrechnungen.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

:BRIEFE
echo Uebtrage Briefe auf Sever...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Briefe2010.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

:DOKS
echo Uebtrage Dokumente auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Dokumente.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

:PRIVAT
echo Uebtrage Privat auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Privat.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

:TAGEBUCH
echo Uebtrage Tagebuch auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Tagebuch2010.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

:ALLE
echo Ubetrage alle Dateien auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Privat/backup>> script.ftp
echo lcd "d:\Michael\eigene Dateien">> script.ftp
echo put "Abrechnungen.7z">> script.ftp
echo put "Briefe2010.7z">> script.ftp
echo put "Dokumente.7z">> script.ftp
echo put "Privat.7z">> script.ftp
echo put "Tagebuch2010.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
ftp /s:script.ftp
echo Loesche FTP-Scriptdatei...
del script.ftp
GOTO MENU
rem ***************************************************************************

SirThornberry 18. Aug 2010 21:25

AW: FTP Upload per VBScript
 
Du könntest das Script noch kürzen in dem du verbinden zum Server etc. was immer anfällt auch immer machst und nicht bei allen Varianten einzeln hinschreibst.

Luckie 18. Aug 2010 21:32

AW: FTP Upload per VBScript
 
An der Optimierung arbeite ich noch. Nur macht das Programmieren in der Lobby keinen richtigen Spaß und so was offline zu machen ist etwas blöd, wenn man nicht testen kann. Deswegen erst mal die quick and dirty Lösung für das langsame WLan hier. ;)

Namenloser 18. Aug 2010 21:34

AW: FTP Upload per VBScript
 
Als Denkanstoß: Du kannst die Batch-Datei intern mit einem bestimmten Parameter aufrufen, um Funktionsaufrufe zu simulieren. Etwa so:
Code:
@echo off

REM Funktionsaufruf abfragen
if %1==_connectftp goto ConnectFTP

:Menu
echo Menu
echo ------------
echo [1] Case 1
echo [2] Case 2
echo.

set asw=0
set /P asw="Auswahl: "

if %asw%==1 goto Case1
if %asw%==2 goto Case2
goto Menu

:Case1
REM Funktionsaufruf
call %~dpnx0 _connectftp
REM ...
goto :End

:Case1
REM Funktionsaufruf
call %~dpnx0 _connectftp
REM ...
goto :End

:ConnectFTP
REM ...

:End

Luckie 19. Aug 2010 14:28

AW: FTP Upload per VBScript
 
Zitat:

Zitat von NamenLozer (Beitrag 1043210)
Als Denkanstoß: Du kannst die Batch-Datei intern mit einem bestimmten Parameter aufrufen, um Funktionsaufrufe zu simulieren.

Das wusste ich noch nicht. Mal sehen, wie ich das optimiere, wenn ich wieder dauerhaft Internet habe.

Luckie 29. Nov 2011 08:30

AW: FTP Upload per VBScript
 
So, ich bin jetzt dabei das Script zu optimieren. Was ich jetzt habe ist folgendes:
Code:
rem Projekt         : FTP-Backup
rem Autor         : Michael Puff <mail@michael-puff.de>
rem Datum         : 2011-11-29
rem   Beschreibung   : Backupskript zur Übertragung von passwortgeschützen mit 7Zip gepackten
rem                 Archiven auf einen FTP-Server. 7Zip muss vorhanden sein und im Suchpfad
rem                 liegen.

@echo off
cls
echo FTP Backup Script
echo =================
echo.
echo Zugangsdaten fuer zeus03.de
echo ----------------------------
set /P user="Benutzer: "
set /P pw="Passwort: "

cls
:PW
echo Passwort fuer Archive
echo ---------------------
set /P pw1="Passwort: "
cls
set /P pw2="Passwort wiederholen: "
if %pw1% == %pw2% (
   cls
   goto MENU
) else (
   echo "Passwoerter stimmen nicht ueberein"
   echo.
   goto PW
)

rem Menü
:MENU
if EXIST script.ftp del script.ftp
echo.
echo Dateiauswahl
echo ------------
echo [1] Abrechnungen
echo [2] Briefe
echo [3] Computer
echo [4] Dokumente
echo [5] Sonstige Dateien
echo [6] Tagebuch
echo [7] Vorlagen
echo [0] Beenden
echo.

set asw=0
set /P asw="Auswahl: "

if %asw%==0 goto :EOF
if %asw%==1 goto ABR
if %asw%==2 goto BRIEFE
if %asw%==3 goto COMPUTER
if %asw%==4 goto DOKS
if %asw%==5 goto SONSTIGEDATEIEN
if %asw%==6 goto TAGEBUCH
if %asw%==7 goto VORLAGEN


:SONSTIGEDATEIEN
echo Sichere sonstige Dateien
echo Packe sonstige Dateien...
call 7z a d:\Computer\Sonstige_Dateien.zip "d:\Sonstige Dateien" -x!*.mp3 -r -mx9 -mmt -p%pw1% 
echo Uebtrage sonstige Dateien auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Admin/Backup>> script.ftp
echo lcd "d:\Computer">> script.ftp
echo put "Sonstige_Dateien.zip">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
call ftp -s:script.ftp
rem Aufräumen
echo Loesche FTP-Scriptdatei...
del script.ftp
echo Löesche Archiv
del Sonstige_Dateien.zip
GOTO MENU
rem ***************************************************************************

:VORLAGEN
echo Sichere Vorlagen
echo Packe Vorlagen...
call 7z a d:\Computer\Vorlagen.zip "d:\Vorlagen" -mx9 -mmt -p%pw1% 
dir *.zip /W
echo Uebtrage Privat auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Admin/Backup>> script.ftp
echo lcd "d:\Computer">> script.ftp
echo put "Vorlagen.zip">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
call ftp -s:script.ftp
rem Aufräumen
echo Loesche FTP-Scriptdatei...
del script.ftp
echo Loesche Archiv...
del Vorlagen.zip
GOTO MENU

:EOF
Ich habe es etwas gekürzt hier dargestellt und nicht den Code für jeden Menüpunkt gepostet. Aber das Prinzip sollte klar sein. Wie kann ich das jetzt mit einem Funktionsaufruf lösen, dem ich Dateiname des Archivs und den Pfad, der zu packenden Dateien, übergebe? Das mit den Funktionsaufrufen ist mir noch nicht ganz klar.

Luckie 29. Nov 2011 09:36

AW: FTP Upload per Batchscript
 
Hat sich erledigt. Ich habe eine andere Lösung gefunden:
Code:
rem Projekt         : FTP-Backup
rem Autor         : Michael Puff <mail@michael-puff.de>
rem Datum         : 2011-11-29
rem Beschreibung   : Backupskript zur Übertragung von passwortgeschützen mit 7Zip gepackten
rem                 Archiven auf einen FTP-Server. 7Zip muss vorhanden sein und im Suchpfad
rem                 liegen.

@echo off
cls
echo FTP Backup Script
echo =================
echo.
echo Zugangsdaten fuer zeus03.de
echo ----------------------------
set /P user="Benutzer: "
set /P pw="Passwort: "

cls
:PW
echo Passwort fuer Archive
echo ---------------------
set /P pw1="Passwort: "
cls
set /P pw2="Passwort wiederholen: "
if %pw1% == %pw2% (
   cls
   goto MENU
) else (
   echo "Passwoerter stimmen nicht ueberein"
   echo.
   goto PW
)

rem Menü
:MENU
if EXIST script.ftp del script.ftp
echo.
echo Dateiauswahl
echo ------------
echo [1] Abrechnungen
echo [2] Briefe
echo [3] Computer
echo [4] Dokumente
echo [5] Sonstige Dateien
echo [6] Tagebuch
echo [7] Vorlagen
echo [0] Beenden
echo.

set asw=0
set /P asw="Auswahl: "

if %asw%==0 goto :EOF
if %asw%==1 goto ABR
if %asw%==2 goto BRIEFE
if %asw%==3 goto COMPUTER
if %asw%==4 goto DOKS
if %asw%==5 goto SONSTIGEDATEIEN
if %asw%==6 goto TAGEBUCH
if %asw%==7 goto VORLAGEN

:ABR
set DIRECTORY="d:\Abrechnungen"
set FILENAME=Abrechnungen
goto UPLOAD
:BRIEFE
set DIRECTORY="d:\Briefe"
set FILENAME=Briefe
goto UPLOAD
:COMPUTER
set DIRECTORY="d:\Computer"
set FILENAME=Computer
goto UPLOAD
:DOKS
set DIRECTORY="d:\Privat\Dokumente"
set FILENAME=Dokumente
goto UPLOAD
:SONSTIGEDATEIEN
set DIRECTORY="d:\Sonstige Dateien"
set FILENAME=Sonstige_Dateien
goto UPLOAD
:TAGEBUCH
set DIRECTORY="d:\Tagebuc"
set FILENAME=Tagebuch
goto UPLOAD
:VORLAGEN
set DIRECTORY="d:\Vorlagen"
set FILENAME=Vorlagen
goto UPLOAD

:UPLOAD
echo Sichere %FILENAME%
echo Packe %FILENAME%...
call 7z a d:\Computer\%FILENAME%.7z "%DIRECTORY%" -mx9 -mmt -p%pw1% -mhe -x!*.mp3
dir %FILENAME%.7z /W
echo Uebtrage %FILENAME% auf Server...
rem FTP-Scriptdatei erstellen
echo open zeus03.de>> script.ftp
echo %user%>> script.ftp
echo %pw%>> script.ftp
echo hash>> script.ftp
echo binary>> script.ftp
echo cd html/Admin/Backup>> script.ftp
echo lcd "d:\Computer">> script.ftp
echo put "%FILENAME%.7z">> script.ftp
echo close>> script.ftp
echo quit>> script.ftp
call ftp -s:script.ftp
rem Aufräumen
echo Loesche FTP-Scriptdatei...
del script.ftp
echo Loesche Archiv...
del %FILENAME%.7z
GOTO MENU
rem ***************************************************************************

:EOF


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz