DOS скрипт tp FTP с удаленного сервера и копирование файлов в локальную папку - PullRequest
0 голосов
/ 24 января 2012

Мне нужно написать один скрипт dos, который сначала отправит FTP с удаленного сервера в мой локальный каталог, а затем скопирует эти файлы в другую папку на локальном компьютере.Причина второго шага заключается в том, что путь к папке назначения зависит от того, является ли системный процессор 32-разрядным или 64-разрядным.

У меня есть два отдельных сценария, которые сейчас работают нормально.Но когда я объединяю их в один скрипт, происходит сбой в командной строке ftp.Вот сценарий, который я использую -

@echo off
:MAIN

SETLOCAL ENABLEDELAYEDEXPANSION


set winver=%PROCESSOR_ARCHITECTURE%

rmdir c:\batch\temp

mkdir c:\batch\temp

goto :ftpbegin

:ftpbegin

@ftp -i -s:"%~f0"&GOTO:EOF
open x.y.z.a
<userid>
<password>
!:-----FTP commands here -----
lcd C:\batch\temp
cd CGServices\Uploads
binary
mget "*.psl"
mget "*.PST"
mget "*.psy"
get abc.ini
get def.pmd
disconnect
bye

:eof

exit /b


:findwin

if %winver% ==x86 (goto :copywin32) else (goto :copywin64)


:copywin32

echo "inside copywin32"

<do the copy files here>

:copywin64
<do copy files here>

exit /b 0

Тем не менее, сценарий ftp, кажется, вызывает разрыв при выполнении второй части моей программы, так как он вызывает программу в цикле в приглашении ftp.Таким образом, ни одна из команд dos не транслируется в режиме FTP.

Любая помощь в достижении этого в одном скрипте за это очень ценится.

спасибо, Сандерс

Ответы [ 2 ]

1 голос
/ 24 января 2012

Команда FTP AFAIK не может обрабатывать команды из командной строки без чтения команд ftp из внешнего файла. Я обычно скачиваю версию wget для Windows, и она хорошо работает для нас, возможно, вы хотели бы взглянуть на это.

Вот инструкция для wget http://www.editcorp.com/Personal/Lars_Appel/wget/v1/wget_7.html

например

wget ftp://<user>:<password>@server.com/upload/file.ext
0 голосов
/ 26 января 2012

После вызова команды ftp вы указываете сценарию перейти на ': EOF'.Вы не можете использовать метку :EOF для перехода внутри командного файла.Goto :EOF в основном означает «перейти в конец файла», что, как правило, совпадает с вызовом exit /b.Вы также можете позвонить goto :EOF из подпрограммы.В данном случае это означает «это конец подпрограммы».Для получения дополнительной информации см. goto /? и call /?

Поскольку в ftp.exe вы используете файл .bat в качестве командного сценария ftp, все строки перед open x.y.z.a будут давать вам invalid command сообщения., поэтому было бы хорошо минимизировать количество строк перед блоком команд FTP.

Ваш скрипт должен выглядеть следующим образом:

@echo off
goto main

:ftpbegin
@ftp -i -s:"%~f0" & goto ftpend
open x.y.z.a
<userid>
<password>
!:-----FTP commands here -----
lcd C:\batch\temp
cd CGServices\Uploads
binary
mget "*.psl"
mget "*.PST"
mget "*.psy"
get abc.ini
get def.pmd
disconnect
bye

:main
SETLOCAL ENABLEDELAYEDEXPANSION
set winver=%PROCESSOR_ARCHITECTURE%
rmdir c:\batch\temp
mkdir c:\batch\temp
goto ftpbegin

:ftpend
if not "%winver%"=="x86" goto copywin64

REM did not jump, so this is a 32-bit system
echo "inside copywin32"
<do copy files here>
goto finish

:copywin64
echo "inside copywin64"
<do copy files here>

:finish
endlocal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...