Подтвердить что ты не робот

Как ftp с пакетным файлом?

Мне нужен пакетный файл ftp для сервера, зачитайте текстовый файл и отключите его. Сервер требует пользователя и пароль. Я попробовал

@echo off
pause
@ftp example.com
username
password
pause

но он никогда не вошел в систему. Как я могу заставить это работать?

4b9b3361

Ответ 1

Ответ 0x90h помог многим...

Я сохранил этот файл как u.ftp:

open 10.155.8.215 
user
password
lcd /D "G:\Subfolder\"
cd  folder/
binary
mget file.csv
disconnect
quit

Затем я запустил эту команду:

ftp -i -s:u.ftp

И это сработало!!!

Спасибо многому человеку:)

Ответ 2

С помощью FTP-клиента Windows вы хотите использовать параметр -s:filename для указания script для запуска FTP-клиента. В документации конкретно указывается, что вы не должны пытаться подключать вход к FTP-клиенту с символом <.

Выполнение script начнется немедленно, поэтому оно работает для имени пользователя/пароля.

Однако безопасность этой настройки вызывает сомнения, поскольку теперь у вас есть имя пользователя и пароль для FTP-сервера, видимый всем, кто решает посмотреть ваш командный файл.

В любом случае вы можете сгенерировать файл script на лету из командного файла, а затем передать его FTP-клиенту, например:

@echo off

REM Generate the script. Will overwrite any existing temp.txt
echo open servername> temp.txt
echo username>> temp.txt
echo password>> temp.txt
echo get %1>> temp.txt
echo quit>> temp.txt

REM Launch FTP and pass it the script
ftp -s:temp.txt

REM Clean up.
del temp.txt

Замените имя сервера, имя пользователя и пароль вашими данными, и пакетный файл будет генерировать script как temp.txt для запуска ftp с помощью script, а затем удалить script.

Если вы всегда получаете тот же файл, вы можете заменить %1 на имя файла. Если вы не просто запустите пакетный файл и укажите имя файла, чтобы получить его как аргумент.

Ответ 3

Это старое сообщение, однако, одна из альтернатив заключается в использовании параметров команды:

ftp -n -s:ftpcmd.txt

the -n будет подавлять начальный логин, а затем содержимое файла будет: (замените 127.0.0.1 на URL-адрес вашего FTP-сайта)

open 127.0.0.1
user myFTPuser myftppassword
other commands here...

Это позволяет избежать пользователя/пароля на отдельных строках

Ответ 4

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

ftp -s:filename

Дополнительная информация здесь: http://www.nsftools.com/tips/MSFTP.htm

Я не уверен, хотя если бы он работал с именем пользователя и паролем.

Ответ 5

Каждая строка командного файла будет выполнена; но только после завершения предыдущей строки. В вашем случае, как только он попадет на ftp-линию, программа ftp начнет и возьмет на себя ввод пользователя. Когда он будет закрыт, остальные строки будут выполнены. Это означает, что имя пользователя/пароль никогда не отправляются в программу FTP и вместо этого будут отправлены в командную строку после закрытия программы ftp.

Вместо этого вам нужно передать все, что вам нужно, в командной строке ftp. Что-то вроде:

@echo off
echo user MyUserName> ftpcmd.dat
echo MyPassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat SERVERNAME.COM
del ftpcmd.dat

Ответ 6

Использование

ftp -s:FileName 

как описано в Документация продукта Windows XP Professional.

Имя файла, которое вы должны указать вместо FileName, должно содержать команды FTP, которые вы хотите отправить на сервер. Среди этих команд есть

  • открыть компьютер [Порт] для подключения к FTP-серверу,
  • пользователь UserName [пароль] [учетная запись] для аутентификации с FTP-сервера,
  • получить RemoteFile [LocalFile] для извлечения файла,
  • выйти, чтобы завершить сеанс FTP и завершить работу ftp-программы.

Дополнительные команды можно найти в подкомандах Ftp.

Ответ 7

Вы также можете использовать PowerShell; это то, что я сделал. Поскольку мне нужно было загрузить файл на основе шаблона, я динамически создавал командный файл, а затем ftp делал все остальное.

Я использовал основные команды PowerShell. Мне не нужно было загружать какие-либо дополнительные компоненты. Сначала я проверил, существует ли требуемое количество файлов. Если они я второй раз вызывал FTP, у меня есть Mget. Я запускаю это из Windows Server 2008, подключающегося к удаленному серверу Windows XP.

function make_ftp_command_file($p_file_pattern,$mget_flag)
{
    # This function dynamically prepares the FTP file.
    # The file needs to be prepared daily because the
    # pattern changes daily.
    # PowerShell default encoding is Unicode.
    # Unicode command files are not compatible with FTP so
    # we need to make sure we create an ASCII file.

    write-output "USER" | out-file -filepath C:\fc.txt -encoding ASCII
    write-output "ftpusername" | out-file -filepath C:\fc.txt -encoding ASCII -Append
    write-output "password" | out-file -filepath C:\fc.txt -encoding ASCII -Append
    write-output "ASCII" | out-file -filepath C:\fc.txt -encoding ASCII -Append
    If ($mget_flag -eq "Y")
    {
        write-output "prompt" | out-file -filepath C:\fc.txt -encoding ASCII -Append
        write-output "mget $p_file_pattern" | out-file -filepath C:\fc.txt -encoding ASCII -Append
    }
    else
    {
        write-output "ls $p_file_pattern" | out-file -filepath C:\fc.txt -encoding ASCII -Append
    }

    write-output quit | out-file -filepath C:\fc.txt -encoding ASCII -Append
}


###########################  Init Section ###############################
$yesterday = (get-date).AddDays(-1)
$yesterday_fmt = date $yesterday -format "yyyyMMdd"
$file_pattern = "BRAE_GE_*" + $yesterday_fmt + "*.csv"
$file_log = $yesterday_fmt + ".log"

echo  $file_pattern
echo  $file_log


############################## Main Section ############################
# Change location to folder where the files need to be downloaded
cd c:\remotefiles

# Dynamically create the FTP Command to get a list of files from
# the remote servers
echo "Call function that creates a FTP Command "
make_ftp_command_file $file_pattern N


#echo "Connect to remote site via FTP"
# Connect to Remote Server and get file listing
ftp -n -v -s:C:\Clover\scripts\fc.txt 10.129.120.31 > C:\logs\$file_log

$matches=select-string -pattern "BRAE_GE_[A-Z][A-Z]*" C:\logs\$file_log

# Check if the required number of Files available for download
if ($matches.count -eq 36)
{
    # Create the FTP command file

    # This time the command file has an mget rather than an ls
    make_ftp_command_file $file_pattern Y

    # Change directory if not done so
    cd c:\remotefiles

    # Invoke ftp with newly created command file
    ftp -n -v -s:C:\Clover\scripts\fc.txt 10.129.120.31 > C:\logs\$file_log
}
else
{
    echo "The full set of files is not available"
}

Ответ 8

Вот что я использую. В моем случае определенные ftp-серверы (pure-ftpd для одного) всегда будут запрашивать имя пользователя даже с параметром -i и улавливать команду "имя пользователя" в качестве интерактивного пароля. Что я делаю, он вводит несколько команд NOOP (без операции), пока сервер ftp не истечет, а затем войдите в систему:

open ftp.example.com 
noop
noop
noop
noop
noop
noop
noop
noop
user username password
...
quit

Ответ 9

Я написал файл script как *.sh

#!/bin/sh
set -x
FTPHOST='host-address'
FTPUSER='ftp-username'
FTPPASSWD='yourPass'

ftp -n -v $FTPHOST << EOT
ascii
user $FTPUSER $FTPPASSWD
prompt
##Your commands
bye
EOT

Прекрасно работает для меня