Как ftp с пакетным файлом?
Мне нужен пакетный файл ftp для сервера, зачитайте текстовый файл и отключите его. Сервер требует пользователя и пароль. Я попробовал
@echo off
pause
@ftp example.com
username
password
pause
но он никогда не вошел в систему. Как я могу заставить это работать?
Ответы
Ответ 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
Прекрасно работает для меня