Войти

Показать полную графическую версию : [решено] FTP + CMD


Art644
13-04-2009, 14:00
Всем привет.
Задача в следующем: Написать батник, чтобы файлы из папки Outbox отправлялись на FTP, складывались в папку Sent, и после отправки папка Outbox очищалась. но, если по каким то причинам FTP не принял файл - он остается в Outbox. Для этого придумал так, что после отправки на фтп, отуда для подтверждения приходит файлик ok.txt, если приходит - значит все норм и папка Outbox очищается. Это в идеале. В реале не работает)

Вот часть батника:

@echo off
set FROM=C:\WINDOWS\exprep
set TO=c:\temp\expert\outbox\
md "%TO%\"
IF /I %Windir% == C:\WINNT GOTO Win2K
set vdate=%DATE:~0,-5%
GOTO SetFileName
:Win2K
set vdate=%DATE:~3,-5%
:SetFileName
set vtime=%TIME:~0,-3%
set vtime=%vtime::=.%
C:\PROGRA~1\WinRAR\rar.exe a -r "%TO%\%VDATE%.rar" "%FROM%\*.*"
del c:\WINDOWS\exprep\*.* /S /q >nul
xcopy c:\temp\expert\outbox\*.rar c:\temp\expert\sent\ /s /e /h >nul
ftp -s:ftp.txt ftp.ftp.ru
if exist c:\temp\expert\outbox\ok.txt (del /s c:\temp\expert\outbox\*.* /q >nul) else goto :EOF


а вот содержание ftp.txt

user
pass
lcd c:\temp\expert\outbox
put *.rar
get ok.txt
bye


в итоге, батник создает архив, копирует в Sent, подключается к фтп, копирует архив туда, но в любом случае очищает Outbox, даже если файла ok.txt не было на фтп. Это и есть проблема.
Плиз, хелп. )

sushnyak
15-04-2009, 14:18
а каким образом у тебя на удаленном ftp создается файл отчета "ok.txt"

yeputons
17-04-2009, 12:36
можешь попробовать:
1)разместить перед предпоследней командой батника строчку вида del /s c:\temp\expert\outbox\ok.txt
2)Заменить

if exist c:\temp\expert\outbox\ok.txt (del /s c:\temp\expert\outbox\*.* /q >nul) else goto :EOF

на

if exist c:\temp\expert\outbox\ok.txt (
del /s c:\temp\expert\outbox\*.* /q >nul
) else (
goto EOF
)

Art644
21-04-2009, 06:23
люди спасибо, разреб - все заработало. подкоректировал оба файлика. загвоздка в фтп была основная





@echo off
taskkill /f /im expmon.exe>nul
set FROM=C:\WINDOWS\exprep
set TO=c:\temp\expert\outbox\
md "%TO%\"
IF /I %Windir% == C:\WINNT GOTO Win2K
set vdate=%DATE:~0,-5%
GOTO SetFileName
:Win2K
set vdate=%DATE:~3,-5%
:SetFileName
set vtime=%TIME:~0,-3%
set vtime=%vtime::=.%
C:\PROGRA~1\WinRAR\rar.exe a -r "%TO%\%VDATE%.rar" "%FROM%\*.*"
del c:\WINDOWS\exprep\*.* /S /q >nul
start %WINDIR%\expmon.exe >nul
del /s c:\temp\expert\outbox\*.txt
ftp -s:ftp.txt ftp.ftp.ru
if exist c:\temp\expert\outbox\ok.txt MOVE c:\temp\expert\outbox\*.rar c:\temp\expert\sent\





user
pass
lcd c:\temp\expert\outbox
prompt
mput *.rar
mget *.txt
bye

NiOl
04-05-2009, 19:48
есть похожая задачка, с ней такая проблема:

1. Как выкладывать отдельный файл командой ftp.exe на фтпшник с докачкой обязательно
2. Как при этом сохранить исходную дату/время файлов.

Т.е. есть вчерашний файл, объемом 140м, который сегодня кладу на фтп, но за почаса, допустим, выгрузилось только первые 100м и произошел обрыв. Завтра процесс повторяю и команда не качает файл заново, а добивает начатое вчера, выгружая оставшиеся 40м, вместо всех 140м, но при этом дата у файла на фтп окажется завтрашней, а должна быть датой исходного файла.

зы: надеюсь никого не запутал... прошу 2 ответа по пунктам, плиз.

amel27
05-05-2009, 03:37
NiOl, AFAIK штатный ftp.exe не поддерживает докачку, бесплатные альтернативы: NcFTP (http://www.ncftp.com/ncftp/), MOVEit (http://www.ipswitchft.com/products/moveit/client/freely/index.asp)

NiOl
18-05-2009, 18:54
В принципе, с небольшим упращением проверок сделал.
Использовал MoveIt ftps, но пришлось отказаться от проверки длины файлов, т.к. ftps не понимает команду "literal" (а заодно и "send", чего я никак не ожидал и никак не мог "поймать" глючок).




© OSzone.net 2001-2012