strate Posted August 7, 2006 Posted August 7, 2006 I'm in the early steps of creating a script to automate the transfer of two files thru FTP. Instead of reading for when a file transfered incorrectly I'm reading for when it transferred correctly. Our FTP after a good transfer returns: 226 transfer complete. Basically I need the "226". At the same time since this is my first time doing something like this I have each step write to a file, then the next step will read from the file to ensure that it is the correct next step. I hope this makes sense. It "works" but I know it can be done better. The code in its whole is at the bottom of the post the section worth looking at though follows. If StringInStr($currentRead, $Split[1]&"\>") <> 0 Then If StringInStr($currentRead, $Path) = 0 Then If FileReadLine($StatusFile,1) = 'FTP Command Open' Then FileDelete($StatusFile) StdinWrite($foo,"cd " & $Path & @LF) FileWrite($StatusFile,'Change Dir' & @CRLF) EndIf EndIf EndIf If StringInStr($currentRead, $Path) <> 0 Then If FileReadLine($StatusFile,1) = 'Change Dir' Then FileDelete($StatusFile) StdinWrite($foo,'ftp -v -n qaddb2' & @LF) FileWrite($StatusFile,'ftp -v -n qaddb2' & @CRLF) EndIf EndIf If StringInStr($currentRead, '220 ') <> 0 Then If FileReadLine($StatusFile,1) = 'ftp -v -n qaddb2' Then FileDelete($StatusFile) WinSetTitle($Command_Prompt& ' - ftp -v -n qaddb2', "", "FTP COMMAND") WinActivate("FTP COMMAND") WinWaitActive("FTP COMMAND") StdinWrite($foo,'USER ' & $QAD_Login_Name & ' ' & $QAD_Password & @CRLF) FileWrite($StatusFile,'Entered USER data' & @CRLF) EndIf EndIf expandcollapse popup#include <Array.au3> $QAD_Login_Name = 'USER' $QAD_Password = 'PASSWORD' $Command_Prompt = @ComSpec $StatusFile = @TempDir & '\FTP.log' ;~ FileWrite($StatusFile,'Prompt Open' & @MON & '/' & @MDAY & '/' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC & @CRLF) $Path = '' $Split = StringSplit($Command_Prompt,'\') For $i = 2 To UBound($Split)-2 If $i = UBound($Split)-2 Then $Path = $Path & $Split[$i] Else $Path = $Path & $Split[$i] & '\' EndIf Next FileDelete($StatusFile) WinKill('FTP COMMAND') If Not WinExists("FTP COMMAND") Then FileWrite($StatusFile,'FTP Command Open' & @CRLF) Global $foo = Run($Command_Prompt,$Split[1], @SW_SHOW,3) WinActivate($Command_Prompt) WinWaitActive($Command_Prompt) WinSetTitle($Command_Prompt, "", "FTP COMMAND") WinActivate("FTP COMMAND") WinWaitActive("FTP COMMAND") EndIf AdlibEnable('_FooMonitor') While 1 If $foo Then $charsWaiting = StdoutRead($foo, -1 ,1) If @error = -1 Then $ourProcess = 0 MsgBox(0, "App Exited", "Process has exited...") ExitLoop EndIf If $charsWaiting Then $currentRead = StdoutRead($foo, -1 , 0) ConsoleWrite($currentRead) $Read = Stringsplit($currentRead,@LF) Dim $Transfer[3][3] $Transfer[1][1] = 'schedule.prn' $Transfer[1][2] = '' $Transfer[2][1] = 'export.txt' $Transfer[2][2] = '' If StringInStr($currentRead, $Split[1]&"\>") <> 0 Then If StringInStr($currentRead, $Path) = 0 Then If FileReadLine($StatusFile,1) = 'FTP Command Open' Then FileDelete($StatusFile) StdinWrite($foo,"cd " & $Path & @LF) FileWrite($StatusFile,'Change Dir' & @CRLF) EndIf EndIf EndIf If StringInStr($currentRead, $Path) <> 0 Then If FileReadLine($StatusFile,1) = 'Change Dir' Then FileDelete($StatusFile) StdinWrite($foo,'ftp -v -n qaddb2' & @LF) FileWrite($StatusFile,'ftp -v -n qaddb2' & @CRLF) EndIf EndIf If StringInStr($currentRead, '220 ') <> 0 Then If FileReadLine($StatusFile,1) = 'ftp -v -n qaddb2' Then FileDelete($StatusFile) WinSetTitle($Command_Prompt& ' - ftp -v -n qaddb2', "", "FTP COMMAND") WinActivate("FTP COMMAND") WinWaitActive("FTP COMMAND") StdinWrite($foo,'USER ' & $QAD_Login_Name & ' ' & $QAD_Password & @CRLF) FileWrite($StatusFile,'Entered USER data' & @CRLF) EndIf EndIf If StringInStr($currentRead, '230 ') <> 0 Then If FileReadLine($StatusFile,1) = 'Entered USER data' Then FileDelete($StatusFile) StdinWrite($foo,'dir' & @CRLF) FileWrite($StatusFile,'FTP: Dir' & @CRLF) EndIf EndIf If StringInStr($currentRead, '226 ') <> 0 Then $TComplete = 1 If FileReadLine($StatusFile,1) = 'FTP: Dir' Then FileDelete($StatusFile) FileWrite($StatusFile,'Get Transfer' & @CRLF) _TransferFiles() Exit EndIf EndIf EndIf EndIf WEnd While 1 $line = StderrRead($foo) If @error = -1 Then ExitLoop MsgBox(0, "STDERR read:", $line) Wend Exit Func _TransferFiles() While 1 $charsWaiting = StdoutRead($foo, -1 ,1) If $charsWaiting Then $currentRead = StdoutRead($foo, -1 , 0) ConsoleWrite($currentRead) EndIf If StringInStr($charsWaiting, 'Local directory now C:\.') = 0 Then If FileReadLine($StatusFile,1) = 'Get Transfer' Then FileDelete($StatusFile) StdinWrite($foo,'lcd c:\' & @CRLF) FileWrite($StatusFile,'Change FTP Dir' & @CRLF) EndIf EndIf For $i = 1 To 2 $charsWaiting = StdoutRead($foo, -1 ,1) FileDelete('C:\'&$Transfer[$i][1]) $begin = TimerInit() While 1 StdinWrite($foo,'get '& $Transfer[$i][1] & @CRLF) Sleep(1000) $charsWaiting = StdoutRead($foo, -1 ,1) If StringInStr($charsWaiting, '226 ') <> 0 Then ConsoleWrite('Transfered Correctly: '& $Transfer[$i][1] & @CRLF) ExitLoop EndIf $dif = TimerDiff($begin) If $dif = 60000 Then; 60000 = 1 min MsgBox(0,'Notice','An error has occured while transfering: ' & $Transfer[$i][1] & @CRLF & 'please retry.') ;~ ExitLoop(2) ???? EndIf WEnd $charsWaiting = StdoutRead($foo, -1 ,1) If $i = 2 Then ExitLoop(2) Next WEnd EndFunc Func _FooMonitor() If Not ProcessExists($foo) Then ;~ MsgBox(0,'Notice','Foo no more!') Exit EndIf EndFuncAny help would be greatly appreciated. INI TreeViewA bus station is where a bus stops, a train station is where a train stops. Onmy desk I have a work station...
strate Posted August 7, 2006 Author Posted August 7, 2006 Is this correct then?? INI TreeViewA bus station is where a bus stops, a train station is where a train stops. Onmy desk I have a work station...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now