バッチファイルをサーバーにftpし、テキストファイルを読み取り、切断します。サーバーにはユーザーとパスワードが必要です。私は試した
@echo off
pause
@ftp example.com
username
password
pause
しかし、ログオンしたことはありません。これを機能させるにはどうすればよいですか?
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
そしてそれは働いた!!!
どうもありがとう:)
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
servername、sername、およびpasswordを詳細に置き換えると、バッチファイルはスクリプトを生成します。スクリプトを削除します。
常に同じファイルを取得している場合は、%1
をファイル名に置き換えることができます。そうでない場合は、単にバッチファイルを起動し、引数として取得するファイルの名前を指定します。
これは古い記事ですが、1つの選択肢はコマンドオプションを使用することです:
ftp -n -s:ftpcmd.txt
-nは最初のログインを抑制し、ファイルの内容は次のようになります(127.0.0.1をFTPサイトのURLに置き換えます)
open 127.0.0.1
user myFTPuser myftppassword
other commands here...
これにより、個別の行でユーザー/パスワードが回避されます
Ftpコマンドをテキストファイルに記述し、次のようにftpコマンドのパラメーターとして指定する必要があります。
ftp -s:filename
詳細はこちら: http://www.nsftools.com/tips/MSFTP.htm
ユーザー名とパスワードのプロンプトで動作するかどうかはわかりません。
つかいます
ftp -s:FileName
Windows XP Professional Product Documentation に記述されています。
FileNameの代わりに指定する必要があるファイル名には、サーバーに送信するFTPコマンドが含まれている必要があります。これらのコマンドの中には
Ftpサブコマンド の下にさらにコマンドがあります。
バッチファイルの各行が実行されます。ただし、前の行が完了した後にのみ。あなたの場合、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
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"
}
ここに私が使用するものがあります。私の場合、特定のftpサーバー(pure-ftpdの場合)は、-iパラメーターを使用しても常にユーザー名の入力を求め、「user username」コマンドを対話型パスワードとしてキャッチします。 FTPサーバーがタイムアウトするまで、いくつかのNOOP(操作なし)コマンドを入力してログインします。
open ftp.example.com
noop
noop
noop
noop
noop
noop
noop
noop
user username password
...
quit