アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windowsサーバから、UNIXサーバにFTPでファイル取得しようとすると、エラーがでてすすみません。
コマンドプロンプトで 対話的に動かす分には問題なく動作するのですが、バッチで動かすと
エラーがでてしまうのです。

動かそうとしているバッチファイルとその読み込みスクリプトは以下です。
(変数部分はぼかしています)

==== myftp.bat BGN ====

set dirname=%DATE:/=%
mkdir D:\master\%dirname%
ftp -s:ftpcmd.txt

==== myftp.bat END ====


==== ftpcmd.txt BGN ====

open hoge
user_naem
pass_word
bin
lcd D:\master
get file.txt
quit

==== ftpcmd.txt END ====

これらを動かすと、

スクリプト ファイル ftpcmd.txt を開くときにエラーが発生しました。

というエラーがでて前に進みません。
対話ベースでは、ftpcmt.txt ファイルの内容をコピペして、きちんと動くので、
何が原因がわかりかねています。

どなたか知恵を貸してください。

A 回答 (3件)

「ftpcmd.txt」が、仮に「C:\aaa\ftpcmd.txt」にあるとしたら、



cd /d "C:\aaa"

という一文を、バッチファイルのFTPコマンド前に記述するか、あるいは、

ftp -s:"C:\aaa\ftpcmd.txt"

として、FTPコマンドを実行されてはいかがでしょうか。
    • good
    • 0

こんなかんじでtest.vbsをつくって実行してみては?



Dim oShell,remoteFolder,localFolder

Set oShell = WScript.CreateObject("Shell.Application")
Set remoteFolder = oShell.NameSpace("ftp://user_naem:pass_word@hoge/")
Set localFolder= oShell.NameSpace("D:\master")
filename="file.txt"
number=getitemnumber(remoteFolder,filename)
if number>=0 then
localFolder.CopyHere remoteFolder.Items.Item(number)
msgbox "OK"
else
msgbox "NO"
end if

function getitemnumber(myfolder,filename)
number=-1
for i=0 to myfolder.Items().Count -1
if myfolder.Items().Item(i).Name=filename then
number=i
exit for
end if
next
getitemnumber=number
end function
    • good
    • 0

No.1です。



最初、ご質問の内容をこちらの環境でも検証しようと思い、ご質問内のファイルの内容を、ほぼそのままこちらの環境で実行してみたのですが、「200 port command successful」と表示され、うまく行きませんでした。これは恐らく、WidnwosのFTPコマンドがPASSIVEに対応していない為だと思います。

ですので、PASSIVEモードに対応したソフトでのやり方を書いていたのですが、ただ、よくご質問を見直してみたら、「スクリプト ファイル ftpcmd.txt を開くときにエラーが発生しました。というエラーがでて前に進みません。」とあったので、PASSIVEモードが原因ではないと思い、回答を書き直し、No.1の回等をさせて頂きました。

ですが、もしかしたら、いつか何かのお役に立つかも知れませんので、その時に書いた文章も、せっかくなので回答させて下さい。

もし、質問者さんの状況が許されるなら、「WinSCP」等のソフトを使った方が簡単です。コマンドラインに対応しています。

■ WinSCP
http://winscp.net/

以下の線内の内容は、WinSCPのスクリプトの例です。

「USERNAME」と、「PASSWORD」と、「example.com」と、「/file.txt」と、「G:\master\」を環境に合わせて書き換えて実行して下さい。

-----------------------
# バッチモードをオン
option batch on

# ファイル上書きの確認無効
option confirm off

# サーバーに接続
open ftp://USERNAME:PASSWORD@example.com -passive=on

# 接続先ディレクトリを変更
cd /

# バイナリモードに変更
option transfer binary

# ファイル操作(GET/PUT等)
GET "/file.txt" "G:\master\"

# 切断
close
exit
-----------------------

バッチファイルからスクリプトを実行する時は、以下の線内のようにします。ファイル名は何でも構いません。

-----------------------

WinSCP /script="スクリプトファイル.txt"

-----------------------

実行には、「WinSCP.exe」だけあれば動作しますが、「WinSCP.com」もあるとコマンドプロンプト上にスクリプト実行中の結果を表示することが出来ます。

また、「WinSCP.exe」をGUIで起動し、サーバーの設定を行うと「WinSCP.ini」に保存され、スクリプト内にパスワードを平文で記述しなくても自動認証してくれるようになります。その場合、「WinSCP.ini」は「WinSCP.exe」と同じディレクトリに置く必要があります。

その場合、スクリプト内の「open ftp://USERNAME:PASSWORD@example.com -passive=on」の「:PASSWORD」部分は削除します。

■ 参考リンク
・コマンドリファレンス - WinSCP Wiki - SourceForge.JP
http://sourceforge.jp/projects/winscp/wiki/scrip …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!