Toon posts:

[BATCH] FTP met retry mechanisme

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi iedereen,

ik heb een Batch script geschreven welke een bestand probeert te versturen middels FTP.
Dit werkt op zich goed, mits de ontvangende FTP server draait.

Hierbij mijn batch file:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
REM ***************************************************************************
REM Try to ping the ftp server
REM ***************************************************************************

ping -n 1 %HOST%

IF ERRORLEVEL 1 GOTO pingfail


REM ***************************************************************************
REM Ping success: create an FTP command file containing the username and 
REM password
REM ***************************************************************************

echo %USR%> ftpcmd.txt
echo %PWD%>> ftpcmd.txt
echo binary>> ftpcmd.txt
echo prompt n>>ftpcmd.txt
echo cd d: >> ftpcmd.txt
echo put %FILE% >> ftpcmd.txt
echo bye >> ftpcmd.txt

REM ***************************************************************************
REM Perform the actual FTP operation and delete the FTP command file
REM This will place the laadbon request on the UPR server.
REM ***************************************************************************

ftp -s:ftpcmd.txt %HOST%
IF ERRORLEVEL 1 GOTO ftpfail

del ftpcmd.txt


Zoals jullie zien PING ik de server; als dat mislukt wordt een foutroutine begonnen.
Maar, als de ping slaagt wordt het FTP commando uitgevoerd.
Helaas geeft ftp.exe altijd error code 0 terug als het uitvoeren gelukt is, maar heb ik geen toegang tot de daadwerkelijke status van het verzenden van het bestand zoals dat tijdens de ftp sessie gebeurd is. Daarom zoek ik een manier om te checken of het bestand succesvol is aangekomen op de server. Als dit niet het geval is wil ik het bestand in een retry-directory stoppen, zodat het verzenden later nogmaals geprobeerd kan worden.

Heeft iemand een idee hoe ik kan checken of een bestand goed is aangekomen op de server in een batch file?

Groeten David

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

probeer eerst iets met telnet ftphost 21 ?
Ik weet alleen niet wat voor errorlevels telnet teruggeeft, maar het zal vast wel iets zijn op het moment dat er geen connectie komt.

[ Voor 71% gewijzigd door SchizoDuckie op 21-05-2008 12:12 ]

Stop uploading passwords to Github!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Als je in plaats van de brakke en heel elementaire built-in FTP client van een krachtiger en veelzijdiger commandline client als ncftp gebruik zou maken heb je veel betere errorhandling als mogelijkheid.

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • jvanhambelgium
  • Registratie: April 2007
  • Laatst online: 30-11 14:23
Inderdaad, begin al eens met een deftige FTP-client te gebruiken ... lftp / ncftp / wput dan zal het leven een stuk makkelijker EN robuuster worden denk ik...

Verwijderd

Topicstarter
Het moet gebeuren met de mogelijkheden die standaard bij Windows XP geleverd worden.
Dit omdat de doelmachine waar het script gaat draaien geen andere dependencies mag krijgen.

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Je ftp output kan je redirecten naar een of andere logfile
Overigens hoef je het prompt commando niet in je script te zetten. Dat kan ook met de -i parameter

%windir%\system32\ftp.exe -s:ftpcmd.txt %HOST%>logfile.txt
Dan lees je dit bestand weer uit en zoek je naar code 226 ( is: Closing data connection. Requested file action successful (for example, file transfer or file abort))

Dat doe je door iets van:
code:
1
2
set completed=no
for /f "tokens=1" %%a in (logfile.txt) do if %%a==226 set completed=yes

En dan %completed% contoleren.
@alt-92: dat zeker, maar dat is natuurlijk niet erg l33t :>

500 "The server made a boo boo"


Verwijderd

output opvangen, daar in checken of het gelukt is....

ok te laat....

[ Voor 14% gewijzigd door Verwijderd op 21-05-2008 14:33 ]


Verwijderd

Topicstarter
Bedankt Vaan Banaan en lextriplex;
Dit lijkt me the way to go in dit geval.

Nogmaals mijn dank!
Pagina: 1