web-dev-qa-db-ja.com

バッチファイルでftpするにはどうすればいいですか?

バッチファイルをサーバーにftpし、テキストファイルを読み取り、切断します。サーバーにはユーザーとパスワードが必要です。私は試した

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

しかし、ログオンしたことはありません。これを機能させるにはどうすればよいですか?

45
user1935683

x90h による回答は大いに役立ちました...

このファイルを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

そしてそれは働いた!!!

どうもありがとう:)

53
Outlier

Windows FTPクライアントを使用する場合、-s:filenameオプションを使用して、実行するFTPクライアントのスクリプトを指定します。ドキュメントでは、<文字を使用してFTPクライアントに入力をパイプしようとしてはならないことを具体的に指摘しています。

スクリプトの実行はすぐに開始されるため、ユーザー名/パスワードに対して機能します。

ただし、バッチファイルを見ることにした誰でもFTPサーバーのユーザー名とパスワードを見ることができるので、このセットアップのセキュリティには疑問があります。

どちらの方法でも、バッチファイルからその場でスクリプトファイルを生成し、次のように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

servernamesername、およびpasswordを詳細に置き換えると、バッチファイルはスクリプトを生成します。スクリプトを削除します。

常に同じファイルを取得している場合は、%1をファイル名に置き換えることができます。そうでない場合は、単にバッチファイルを起動し、引数として取得するファイルの名前を指定します。

45
0x90h

これは古い記事ですが、1つの選択肢はコマンドオプションを使用することです:

ftp -n -s:ftpcmd.txt

-nは最初のログインを抑制し、ファイルの内容は次のようになります(127.0.0.1をFTPサイトのURLに置き換えます)

open 127.0.0.1
user myFTPuser myftppassword
other commands here...

これにより、個別の行でユーザー/パスワードが回避されます

11

Ftpコマンドをテキストファイルに記述し、次のようにftpコマンドのパラメーターとして指定する必要があります。

ftp -s:filename

詳細はこちら: http://www.nsftools.com/tips/MSFTP.htm

ユーザー名とパスワードのプロンプトで動作するかどうかはわかりません。

6
Lasse

つかいます

ftp -s:FileName 

Windows XP Professional Product Documentation に記述されています。

FileNameの代わりに指定する必要があるファイル名には、サーバーに送信するFTPコマンドが含まれている必要があります。これらのコマンドの中には

  • コンピューター[ポート]を開いてFTPサーバーに接続し、
  • user UserName [Password] [Account]FTPサーバーで認証するため、
  • RemoteFile [LocalFile]を取得してファイルを取得し、
  • quitFTPセッションを終了し、ftpプログラムを終了します。

Ftpサブコマンド の下にさらにコマンドがあります。

5
Oswald

バッチファイルの各行が実行されます。ただし、前の行が完了した後にのみ。あなたの場合、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
5
NotMe

PowerShellも使用できます。これは私がやったことです。パターンに基づいてファイルをダウンロードする必要があったので、コマンドファイルを動的に作成し、ftpに残りを任せました。

基本的なPowerShellコマンドを使用しました。追加のコンポーネントをダウンロードする必要はありませんでした。まず、必要な数のファイルが存在するかどうかを確認しました。彼らがMgetで2回目のFTPを呼び出した場合。これを 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"
}
1
kev

ここに私が使用するものがあります。私の場合、特定のftpサーバー(pure-ftpdの場合)は、-iパラメーターを使用しても常にユーザー名の入力を求め、「user username」コマンドを対話型パスワードとしてキャッチします。 FTPサーバーがタイムアウトするまで、いくつかのNOOP(操作なし)コマンドを入力してログインします。

open ftp.example.com 
noop
noop
noop
noop
noop
noop
noop
noop
user username password
...
quit
0
Justin Goldberg