Avatar billede saviola Nybegynder
13. september 2011 - 12:37 Der er 9 kommentarer og
2 løsninger

Batch Script - tjek folder, skriv log og upload fil til ftp - loop ?

Jeg har oprettet dette script som tjekker en bestemt mappe om den indeholder filer, hvis den gør skal der skrives til en log og denne log skal uploades til ftp.

Scriptet fungerer 99% men efter at have tilføjet ændring af datoformat for at finde den folder der skal tjekkes, så er det som om at scriptet looper en enkelt gang og sender fil til ftp uanset om folder et tom eller ej ? I denne situation er folderen tom og derfor skal scriptet ikke gå videre til ftp delen. (filen den uploader er en gammel fil der stadig ligger i log folderen)

Har stiret mig blind på koden - noget input ?


SÅDAN SER SCRIPT UD:

!:--- ændrer datoformat som skal bruges til at finde folder ---

echo %date%

set year=%date:~-4%
echo year=%year%

set month=%date:~4,2%
echo month=%month%

set day=%date:~7,2%
echo day=%day%

set foldername=%year%%month%%day%

echo %foldername%

!:--- tjekker om der ligger filer i folderen ---

@echo off

for /F %%i in ('dir /b "D:\program\Server\Transactions\Normal\%foldername%\*.*"') do (
  echo %Date%, %Time%, %COMPUTERNAME%, Normal folder is NOT empty >> D:\installationfiles\normal\%COMPUTERNAME%.txt
  goto :FTP
)

echo Folder is empty

:FTP

@ftp -i -s:"%~f0"&GOTO:EOF
open ftp.ftpserver.com
brugernavn
password
!:--- FTP commands below here ---
lcd D:\installationfiles\normal
cd /WN/Normal_Check
binary
mput "*.txt"
disconnect
bye



SÅDAN SER DET UD NÅR FILES KØRES:

D:\Installationfiles>checkandupload.cmd

D:\Installationfiles>echo Tue 09/13/2011
Tue 09/13/2011

D:\Installationfiles>set year=2011

D:\Installationfiles>echo year=2011
year=2011

D:\Installationfiles>set month=09

D:\Installationfiles>echo month=09
month=09

D:\Installationfiles>set day=13

D:\Installationfiles>echo day=13
day=13

D:\Installationfiles>set foldername=20110913

D:\Installationfiles>echo 20110913
20110913
Folder is empty
ftp> echo %date%
Invalid command.
ftp>
ftp> set year=%date:~-4%
Invalid command.
ftp> echo year=%year%
Invalid command.
ftp>
ftp> set month=%date:~4,2%
Invalid command.
ftp> echo month=%month%
Invalid command.
ftp>
ftp> set day=%date:~7,2%
Invalid command.
ftp> echo day=%day%
Invalid command.
ftp>
ftp> set foldername=%year%%month%%day%
Invalid command.
ftp>
ftp> echo %foldername%
Invalid command.
ftp>
ftp> @echo off
Invalid command.
ftp>
ftp> for /F %%i in ('dir /b "D:\TPDotnet\Server\Transactions\Normal\%foldername%
\*.*"') do (
Invalid command.
ftp>    echo %Date%, %Time%, %COMPUTERNAME%, Normal folder is NOT empty >> D:\in
stallationfiles\normal\%COMPUTERNAME%.txt
Invalid command.
ftp>    goto :FTP
Invalid command.
ftp> )
Invalid command.
ftp>
ftp> echo Folder is empty
Invalid command.
ftp>
ftp> :FTP
Invalid command.
ftp>
ftp> @ftp -i -s:"%~f0"&GOTO:EOF
Invalid command.
ftp> open ftp.ftpserver.com
Connected to ftp.ftpserver.com.
220 Please enter your login name now.
User (ftp.ftpserver.com:(none)):
331 Password required for Retail

230 User Retail logged in.
ftp> !:--- FTP commands below here ---
ftp> lcd D:\installationfiles\normal
Local directory now D:\installationfiles\normal.
ftp> cd /WN/Normal_Check
250 "/WN/Normal_Check" is current directory.
ftp> binary
200 Type set to IMAGE.
ftp> mput "*.txt"
200 PORT command successful
150 Opening BINARY data connection for /WN/Normal_Check/BSR00253.txt (STREAM)
226 Transfer finished successfully. Data connection closed.
ftp: 204 bytes sent in 0.00Seconds 204000.00Kbytes/sec.
ftp> disconnect
221 Goodbye.
ftp> bye

D:\Installationfiles>
Avatar billede leonberger Novice
13. september 2011 - 12:54 #1
Mangler der ikke et quit, exit el. goto 'something at the end' mellem
'echo Folder is empty' og ':FTP'
Jobbet stopper jo ikke efter denne echo, men falder ned i ftp-delen.
Avatar billede saviola Nybegynder
13. september 2011 - 13:26 #2
Tilføjede et exit efter echo folder is empty og så virkede scriptet som det skulle. Dog ser det stadig lidt underligt ud når script eksekveres hvis den når til FTP: (fordi folder ikke er tom) - det er som om at den løber hele scriptet igennem fra top til bund i "ftp mode" og dette giver en del fejl - undrer mig over at ftp delen pludselig løber hele scriptet igennem istedet for at starte fra FTP: og slutte ved bye ?
Avatar billede saviola Nybegynder
13. september 2011 - 13:35 #3
det er det her den stadig begynder på:

ftp> echo %date%
Invalid command.
ftp>
ftp> set year=%date:~-4%
Invalid command.
ftp> echo year=%year%
Invalid command.
ftp>
ftp> set month=%date:~4,2%
Invalid command.
ftp> echo month=%month%

osv osv


Det er kun en skønhedsfejl men synes ikke ftp delen skal loope igennem hele scriptfilen - det gjorde den ikke før jeg tilføjede disse linier i toppen :

echo %date%

set year=%date:~-4%
echo year=%year%

set month=%date:~4,2%
echo month=%month%

set day=%date:~7,2%
echo day=%day%

set foldername=%year%%month%%day%

echo %foldername%
Avatar billede leonberger Novice
13. september 2011 - 14:22 #4
Hmmmm, nu er jeg ikke så stiv i ftp, men hvad er der i denne fil?
Og hvad skal den gøre?
-s:"%~f0"&GOTO:EOF
Avatar billede saviola Nybegynder
13. september 2011 - 15:04 #5
det er en txt fil der skal uploades

og mht. ftp kommandoen så er det ren copy paste fra nettet - så har ikke været muligt at finde ud af præcis hvad den gør...men den gør jobbet :-)

Har virket fint hele tiden. Hvis man fjerner GOTO:EOF
eksempelvis, så virker det ikke :-)

Tak for input. Du kan smide svar hvis du vil have point.
Avatar billede leonberger Novice
13. september 2011 - 15:45 #6
Nej, så nemt slipper vi ikke :-)
Jeg tror det er den der @ftp der er synderen.

-s:filename    Specifies a text file containing FTP commands; the
                commands will automatically run after FTP starts.

Iflg. dette skal filen indeholde ftp kommandoer, men det ser ud til den peger på din .bat fil?

"%~f0" resolved to the name of the running batch file

fundet på
http://www.dostips.com/DtTipsFtpBatchScript.php
Der kan være mere hjælp at hente.
Avatar billede saviola Nybegynder
13. september 2011 - 15:59 #7
Du har ret. Har selv set på det. Ved at flytte ftp delen over i en separat fil (ftp.txt) og så sætte stien til den fil ind isetdet for "%~f0" så løber den ikke hele skidtet igennem én gang til før den udfører ftp jobbet.

Nu ser det meget pænere ud. Og virker stadig.
Avatar billede leonberger Novice
13. september 2011 - 16:07 #8
Glæder mig det blev løst.
Avatar billede saviola Nybegynder
14. september 2011 - 15:40 #9
Vil du have point på kontoen ?
Avatar billede leonberger Novice
14. september 2011 - 19:09 #10
Du lavede jo halvdelen, så lad os dele :-)
Avatar billede saviola Nybegynder
16. september 2011 - 13:38 #11
Okay
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester