
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件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
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 …
No.2
- 回答日時:
こんなかんじで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
No.1
- 回答日時:
「ftpcmd.txt」が、仮に「C:\aaa\ftpcmd.txt」にあるとしたら、
cd /d "C:\aaa"
という一文を、バッチファイルのFTPコマンド前に記述するか、あるいは、
ftp -s:"C:\aaa\ftpcmd.txt"
として、FTPコマンドを実行されてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.txtではなく.logの方が良いの...
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
psqlでエラーログをとりたい
-
多数のサブディレクトリ内のフ...
-
バッチファイルで文字列削除に...
-
テキストファイルで提出とは?
-
ファイルの最後に文字列挿入
-
VBSで、テキストファイルに対し...
-
ファイル内容の修正、行削除に...
-
MFCの静的リンクと再頒布条件
-
任意のディレクトリ以下に存在...
-
バッチにてフォルダ内ファイル...
-
ウインドウパソコンのファイル...
-
バッチファイル 複数ファイル...
-
C言語のプログラム中に使うsyst...
-
ExcelVBA テキストファイルUNIC...
-
ADODB.Streamで開いたファイル...
-
FTPコマンドでgetしたい
-
VBファイルを0KBにする方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
拡張子を元に戻す
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
psqlでエラーログをとりたい
-
COPYコマンドで結合すると余計...
-
エクセルの各セルの内容をそれ...
-
バッチファイルで文字列削除に...
-
ファイルの最後に文字列挿入
-
UWSCでテキストファイルを開い...
-
バッチファイル 複数ファイル...
-
renameコマンドについて
-
ファイル名の一部をbatで変更し...
-
forfilesで検索したファイルを...
-
外部exeに対しての引数受け渡し
-
Windowsのバッチファイルを利用...
-
VBSでフォルダ内のテキストファ...
-
VBAでエクセルをtxtに変換する...
-
ExcelVBA テキストファイルUNIC...
おすすめ情報