2013-04-22 16 views
36

Chcę plik wsadowy do ftp do serwera, odczytać plik tekstowy i rozłączyć. Serwer wymaga użytkownika i hasła. Spróbowałem:Jak korzystać z ftp z plikiem wsadowym?

ale nigdy się nie zalogował. Jak mogę to uruchomić?

+0

Czy próbowałeś użyciu coś jak rury „|” aby skierować do niego nazwę użytkownika i hasło? A może plik tekstowy zawierający nazwę użytkownika i hasło, a następnie "ftp domain.net TimH

Odpowiedz

5

Musisz napisać polecenia ftp w pliku tekstowym i przekazać go jako parametr dla komendy ftp jak ten:

ftp -s:filename 

Więcej informacji tutaj: http://www.nsftools.com/tips/MSFTP.htm

Nie jestem pewien, ale jeśli będzie działać z monitem nazwy użytkownika i hasła.

4

Każda linia pliku wsadowego zostanie wykonana; ale dopiero po zakończeniu poprzedniej linii. W twoim przypadku, gdy tylko dotrze do linii ftp, uruchomi się program ftp i przejmie dane wprowadzane przez użytkownika. Po zamknięciu pozostałe linie zostaną wykonane. Oznacza to, że nazwa użytkownika/hasło nigdy nie są wysyłane do programu FTP, a zamiast tego będą podawane do wiersza poleceń, gdy program ftp zostanie zamknięty.

Zamiast tego musisz przekazać wszystko, czego potrzebujesz, w linii komend ftp. Coś jak:

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

Zastosowanie

ftp -s:FileName 

jak opisano w Windows XP Professional Product Documentation.

Nazwa pliku, którą należy podać w miejsce Nazwa pliku, musi zawierać polecenia FTP, które chcesz wysłać do serwera. Wśród prac są polecenia

  • open hardware [Port], aby połączyć się z serwerem FTP,
  • Nazwa użytkownika [hasło] [konto] do uwierzytelniania z serwerem FTP,
  • get RemoteFile [Plik_lokalny] w celu pobrania pliku,
  • zamknij, aby zakończyć sesję FTP i zakończyć działanie programu ftp.

Więcej poleceń można znaleźć pod Ftp subcommands.

37

Używając klienta FTP z systemem Windows, należy użyć opcji -s:filename, aby określić skrypt do uruchomienia klienta FTP. W dokumentacji wyraźnie zaznaczono, że nie należy próbować potokować danych wejściowych do klienta FTP za pomocą znaku <.

Wykonanie skryptu rozpocznie się natychmiast, więc działa pod nazwą użytkownika/hasłem.

Jednak bezpieczeństwo tej instalacji jest wątpliwe, ponieważ masz teraz nazwę użytkownika i hasło do serwera FTP widoczne dla każdego, kto zdecyduje się spojrzeć na plik wsadowy.

Tak czy inaczej, można wygenerować plik skryptu w locie z pliku wsadowego, a następnie przekazać go do klienta FTP tak:

@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 

Wymień nazwa_serwera, użytkownika i hasło ze swoimi danymi i plikiem wsadowym wygeneruje skrypt jako temp.txt uruchamiając ftp ze skryptem, a następnie usunie skrypt.

Jeśli zawsze otrzymujesz ten sam plik, możesz zamienić nazwę %1 na nazwę pliku. Jeśli nie, po prostu uruchom plik wsadowy i podaj nazwę pliku, który chcesz pobrać jako argument.

46

Odpowiedź przez 0x90h pomogło ...

Uratowałem ten plik jako u.ftp:

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

I pobiegł polecenie:

ftp -i -s:u.ftp 

I to działało !!!

dziękuję mężczyzna :)

+3

i jeśli chcesz zobaczyć postęp ładowania lub pobierania dodaj wiersz 'hash ' po 'binarnym' – azerafati

+0

Jeśli jego odpowiedź bardzo ci pomogła, zaznacz jego odpowiedź jako wybraną! – ErikE

+0

co robi lcd/D "G: \ Podfolder \" i folder cd/do? – Timeless

0

Można użyć PowerShell, a także; to właśnie zrobiłem. Ponieważ musiałem pobrać plik w oparciu o wzorzec, dynamicznie utworzyłem plik poleceń, a następnie pozwoliłem, aby ftp zrobił resztę.

Użyłem podstawowych poleceń PowerShell. Nie musiałem pobierać żadnych dodatkowych składników. Najpierw sprawdziłem, czy istnieje wymagana liczba plików. Jeśli po raz drugi wywołałem FTP przy pomocy Mget. Uruchomiłem to z Windows Server 2008, łącząc się z serwerem zdalnym XP Windows  .

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" 
} 
0

Oto, czego używam. W moim przypadku niektóre serwery ftp (pure-ftpd for one) będą zawsze pytać o nazwę użytkownika, nawet z parametrem -i, i przechwycić polecenie "user username" jako interaktywne hasło. Co zrobić, to wprowadzić kilka noop (bez operacji) Polecenia do czasów serwera ftp na zewnątrz, a następnie zalogować:

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

To jest stara poczta jednak jeden Alternatywą jest użycie opcji polecenia:

ftp -n -s:ftpcmd.txt 

-n będzie tłumić początkowy login i następnie zawartość pliku będzie: (Wymień 127.0.0.1 z adresu URL witryny FTP)

open 127.0.0.1 
user myFTPuser myftppassword 
other commands here... 

Pozwala to uniknąć użytkownika/hasło na oddzielnych liniach

-1

Napisałem skrypt jako plik * 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 

działa dobrze dla mnie

+0

Co robi linia "ascii"? Konwertowanie na kodowanie znaków ASCII lub szukanie plików ASCII? – ChristianG

+0

Nvm, Nauczyłem się, że linia "ASCII" się konwertuje. – ChristianG

Powiązane problemy