Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] FTP + CMD (http://forum.oszone.net/showthread.php?t=137550)

Art644 13-04-2009 14:00 1092734

FTP + CMD
 
Всем привет.
Задача в следующем: Написать батник, чтобы файлы из папки 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 1094703

а каким образом у тебя на удаленном ftp создается файл отчета "ok.txt"

yeputons 17-04-2009 12:36 1096608

можешь попробовать:
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 1099627

люди спасибо, разреб - все заработало. подкоректировал оба файлика. загвоздка в фтп была основная





@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 1110660

есть похожая задачка, с ней такая проблема:

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

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

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

amel27 05-05-2009 03:37 1110929

NiOl, AFAIK штатный ftp.exe не поддерживает докачку, бесплатные альтернативы: NcFTP, MOVEit

NiOl 18-05-2009 18:54 1121711

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


Время: 15:25.

Время: 15:25.
© OSzone.net 2001-