Конечно, вы можете. Первый способ является нормальным, но в некоторых случаях вы также можете использовать функции list или map()
.
Ответ 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
И это сработало !!!
Большое спасибо человеку:)
Я написал скрипт как * .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
Прекрасно работает для меня
Вот что я использую. В моем случае определенные ftp-серверы (pure-ftpd для одного) всегда будут запрашивать имя пользователя даже с параметром -i и улавливать команду «имя пользователя» в качестве интерактивного пароля. Что я делаю, он вводит несколько команд NOOP (без операции), пока сервер ftp не истечет, а затем войдите в систему:
open ftp.example.com
noop
noop
noop
noop
noop
noop
noop
noop
user username password
...
quit
Тем не менее, это старая должность, одна из альтернатив - использовать параметры команды:
ftp -n -s:ftpcmd.txt
. -n будет подавлять начальный логин, а затем содержимое файла будет: (замените 127.0. 0.1 с вашим URL-адресом FTP-сайта)
open 127.0.0.1
user myFTPuser myftppassword
other commands here...
Это позволяет избежать использования пользователя / пароля на отдельных линиях
Каждая строка командного файла будет выполнена; но только после завершения предыдущей строки. В вашем случае, как только он попадет на 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
Используйте
ftp -s:FileName
, как описано в Документация по продукту Windows XP Professional .
Имя файла, которое вы должны указать вместо FileName должен содержать команды FTP, которые вы хотите отправить на сервер. Среди этих команд:
Можно найти больше команд в подкомандах Ftp .
Вы также можете использовать PowerShell; это то, что я сделал. Поскольку мне нужно было загрузить файл на основе шаблона, я динамически создавал командный файл, а затем оставил ftp
.
Я использовал основные команды PowerShell. Мне не нужно было загружать какие-либо дополнительные компоненты. Сначала я проверил, существует ли требуемое количество файлов. Если они я второй раз вызывал FTP, у меня есть Mget. Я запускаю это из Windows Server 2008 , подключающегося к удаленному серверу Windows & nbsp; 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"
}
Вам нужно написать команды ftp в текстовом файле и указать его как параметр для команды ftp следующим образом:
ftp -s:filename
Дополнительная информация здесь: http: // www. nsftools.com/tips/MSFTP.htm
Я не уверен, хотя если бы он работал с именем пользователя и паролем.