2013-04-22 48 views
36

Voglio un file batch su ftp su un server, leggere un file di testo e disconnettermi. Il server richiede un utente e una password. Ho provatoCome eseguire il ftp con un file batch?

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

ma non ha mai effettuato l'accesso. Come posso farlo funzionare?

+0

Hai provato a usare qualcosa di simile a una pipe "|" instradare il nome utente e la password? O forse un file di testo contenente nome utente e password, quindi "ftp domain.net TimH

risposta

5

è necessario scrivere i comandi FTP in un file di testo e dare come parametro per il comando ftp in questo modo:

ftp -s:filename 

Maggiori informazioni qui: http://www.nsftools.com/tips/MSFTP.htm

Non sono sicuro però se funzionerebbe con username e password.

4

Ogni riga di un file batch verrà eseguita; ma solo dopo che la riga precedente è stata completata. Nel tuo caso, non appena colpisce la linea ftp, il programma ftp si avvierà e prenderà il controllo dell'input dell'utente. Quando viene chiuso, vengono eseguite le righe rimanenti. Significa che il nome utente/la password non vengono mai inviati al programma FTP e saranno invece inviati al prompt dei comandi stesso una volta chiuso il programma ftp.

Invece è necessario passare tutto ciò che è necessario sulla riga di comando ftp. Qualcosa di simile:

@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

Usa

ftp -s:FileName 

come misura descritto in Windows XP Professional Product Documentation.

Il nome file che è necessario specificare al posto di Nome file deve contenere i comandi FTP che si desidera inviare al server. Tra le tesi comandi sono

  • aperto Computer [Porta] per connettersi a un server FTP,
  • utente Nome utente [password] [account] per l'autenticazione con il server FTP,
  • get RemoteFile [File locale] per recuperare un file,
  • uscire da per terminare la sessione FTP e terminare il programma ftp.

Altri comandi sono disponibili in Ftp subcommands.

37

Utilizzando il client FTP di Windows, si desidera utilizzare l'opzione -s:filename per specificare uno script per l'esecuzione del client FTP. La documentazione specifica che non si dovrebbe provare a reindirizzare l'input nel client FTP con un carattere <.

L'esecuzione dello script inizierà immediatamente, quindi funziona per nome utente/password.

Tuttavia, la sicurezza di questa configurazione è discutibile poiché ora si ha un nome utente e una password per il server FTP visibili a chiunque decida di guardare il file batch.

In entrambi i casi, è possibile generare il file di script al volo dal file batch e poi passarlo al client FTP in questo modo:

@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 

Sostituire nomeserver, nome utente e la password con i tuoi dettagli e il file batch genererà lo script come temp.txt avvia ftp con lo script e quindi elimina lo script.

Se si ottiene sempre lo stesso file, è possibile sostituire lo %1 con il nome del file. Altrimenti, basta avviare il file batch e fornire il nome del file per ottenere un argomento.

46

La risposta da 0x90h ha aiutato molto ...

ho salvato questo file come u.ftp:

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

Allora ho fatto funzionare questo comando:

ftp -i -s:u.ftp 

e ha funzionato !!!

Grazie un uomo molto :)

+3

e se ti piace vedere l'avanzamento del caricamento o del download aggiungi riga 'hash ' dopo 'binary' – azerafati

+0

Se la sua risposta ti ha aiutato molto, segna la sua risposta come quella selezionata! – ErikE

+0

cosa significa lcd/D "G: \ Sottocartella \" e cartella cd/do? – Timeless

0

È possibile utilizzare PowerShell pure; questo è quello che ho fatto. Poiché avevo bisogno di scaricare un file basato su un pattern, ho creato dinamicamente un file di comando e poi ho lasciato il resto a ftp.

Ho usato i comandi di base di PowerShell. Non ho bisogno di scaricare alcun componente aggiuntivo. Per prima cosa ho controllato se esisteva il numero richiesto di file. Se hanno invocato l'FTP la seconda volta con un Mget. L'ho eseguito da un Windows Server 2008 connesso a un server remoto 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" 
} 
0

Ecco quello che uso. Nel mio caso, alcuni server ftp (pure-ftpd per uno) richiedono sempre il nome utente anche con il parametro -i e prendono il comando "user username" come password interattiva. Quello che faccio è inserire alcuni NOOP (nessuna operazione) comanda fino al timeout del server FTP, e poi login:

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

Questo è un vecchio post tuttavia, un alternativa è quella di utilizzare le opzioni di comando:

ftp -n -s:ftpcmd.txt 

la -n sopprimerà l'accesso iniziale e poi sarebbe il contenuto del file: (sostituire il 127.0.0.1 con il tuo sito URL FTP)

open 127.0.0.1 
user myFTPuser myftppassword 
other commands here... 

questo modo si evita che l'utente/password su righe separate

-1

ho scritto uno script come file * .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 

funziona bene per me

+0

Che cosa fa la linea "ascii"? Conversione in codifica caratteri ASCII o ricerca di file ASCII? – ChristianG

+0

Nvm, Imparato che la linea "ASCII" sta convertendo. – ChristianG

Problemi correlati