• 締切済み

Windows マシンでFTPバッチが動かない

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 ファイルの内容をコピペして、きちんと動くので、 何が原因がわかりかねています。 どなたか知恵を貸してください。

みんなの回答

  • kon77
  • ベストアンサー率70% (83/117)
回答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/script_commands

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答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

  • kon77
  • ベストアンサー率70% (83/117)
回答No.1

「ftpcmd.txt」が、仮に「C:\aaa\ftpcmd.txt」にあるとしたら、 cd /d "C:\aaa" という一文を、バッチファイルのFTPコマンド前に記述するか、あるいは、 ftp -s:"C:\aaa\ftpcmd.txt" として、FTPコマンドを実行されてはいかがでしょうか。

関連するQ&A

  • バッチ処理でftpから自動的にダウンロード

    バッチ初心者です。 バッチを使用してLAN内のftpサーバーからcsvを別のマシンのフォルダへ定期的(10分毎)にダウンロードするようにしたいのです。 テキストファイル(ファイル名ftpcmd.text)に以下のように記述しました。 open 「ftpサーバーのIPアドレス」 「ユーザー名」 「パス」 mget*.csv quit バッチファイル(auto_ftp.bat)に以下のように記述しました。 ftp -i-s:ftpcmd.txt ダウンロード先の指定と10分毎に実行させるにはどのようにすればいいですか? 宜しくお願いします。

  • windows2008でftpをバッチ実行する。

    windows2008サーバーでバッチファイルを作成しftpで複数ファイルを自動転送しようと思います。 今まで(OSはXP)はうまく実行していたのですが、windows2008サーバーではうまくいきません。 ちなみにバッチファイルは @echo off echo ●FTP処理 C:\Windows\System32\ftp.exe -s:d:\ftp\tohost.txt echo on @echo off echo ●終了 tohost.txtの内容は open 192.168.1.1 Uid Pwd bin put d:\ftpdata\a1.txt /afld/a2.txt bye です。 何かwindows2008による特別な方法があるのでしょうか? よろしくお願いいたします。

  • FTPの作業をWindows上のバッチでおこないたい

    こんにちは。Windowsは初心者です。 あるファイルを別のサーバーにFTP(PUT)したいと考えています。 コマンドプロンプトからFTPのコマンドをたたくのではなく なにかバッチファイル?のようなもので、中に一連のFTP処理を記述し バッチファイルを起動という形で処理を行ないたいのです。 バッチファイルの作成の方法がわかりません。 またFTPの記述の仕方がわかりません。あるファイルを別のサーバに FTP(PUT)したいだけなのです。またエラーも認知したいとも思っています。 どんな本を読めば分かりますでしょうか? また具体的なコード(バッチに記述するFTPのコード)を知っていましたら 教えて下さい。

  • 自動ftpバッチで転送速度をろぐに出す方法

    こんにちは windows2008で自動ftpバッチファイルを作成ししています。 自動ftpは出来るのですが、転送速度がログに出力されません。 具体的には手動でftpすると以下のように表示される「24000.00KB/秒」という部分を ログに出したいです。 200 PORT command successful. 150 Opening ASCII mode data connection for autoexec.bat. 226 Transfer complete. ftp: 24 バイトが送信されました 0.00秒 24000.00KB/秒。 そもそもログに表示させることはできないのでしょうか? お分かりの方、お教えください。 今作っているバッチファイルはこんな感じです。 ftpauto.txt ---------------- ftp -s:ftpcmd.txt>>ftp.log 2>&1 ftpcmd.txt ---------------- open XX.XX.XX.XX user-id Password bin cd / lcd C:\ put XXX disconnect bye ------------------------------------ 宜しくお願いします。

  • DOSプロンプトからFTPのスクリプトバッチが起動できない

    Win2000Proです。 以下のようなBATファイルとスクリプトバッチファイルを作成しました。 ---FTP.bat--- (1)pause (2)ftp -n -s:aaa.txt (3)pause ---aaa.txt--- op localhost user user pass ls close quit このBATファイルを実行すると(1)(2)文の無限ループになってしまい 肝心のftpコマンドは実行されません。 DOSプロンプトから手入力で入力すると実行はできます。 また、BATファイル自体、 (1)pause (2)dir (3)pause のように書き換えると問題なく実行できます。 (1)pause (2)ftp (3)pause のように書き換えても同じくループされます。 わかる方いらっしゃいますでしょうか? よろしくお願いします。

  • FTPのバッチファイルで日付を引数で与えたい

    いつもお世話になっております。 FTPのバッチファイルに引数を与える良い方法をご存知ありませんか。 FTPの中では環境変数は使えないとのことですし、悩んでいます。 取得するファイルは日付毎のディレクトリに入っていて、取得後も日付毎のディレクトリに保管するので日付の指定が必要なのですが。 [ftpget.bat]------------------------------------------ ftp-s:ftpget.bat open ホスト名 ユーザー名 パスワード bin prompt cd /~対象ホストのディレクトリ~/YYYYMMDD/host1 !mkdir C:\YYYYMMDD lcd C:\YYYYMMDD mget *.txt quit ---------------------------------------------------- このYYYYMMDDの部分を、『ftpget.bat 20081125』のようにバッチを流す時の引数で与えたいです。 日付は3日前だったり昨日だったり今日だったりします。 今は直接ファイルを編集してYYYYMMDDの部分3箇所を手で直してからバッチファイルを叩いています。 よろしくお願いいたします。

  • ftpコマンドバッチファイルのリダイレクト結果

    以下のようなバッチファイルを作成しました ftp -s:ftpcmd.txt > ftplog.txt FIND /i "226 Transfer complete" ftplog.txt >NUL exit /b %ERRORLEVEL% ftpcmd.txt open hoge anonymous hoge prompt cd /xxxx/ put test.txt quit こうする事でftp送信が正常に終了したかどうかを exitの終了コードで判断しようとしていたのです バッチファイルを手動で動作させたところ成功です しかしこのバッチファイルを Webサーバのサーブレット(javaプログラム)から 動作させるとftplog.txtの出力結果がなぜか プログラムから実行した時のftplog.txt User (hoge:(none)): open hoge prompt cd /xxx/ put test.txt quit こんな結果になってしまうんです あれれ?ftpコマンドが出力するメッセージがリダイレクトされない んです 手動でこのバッチファイルを実行した時は 以下のようになります 226 Transfer complete. のメッセージがサーブレットからバッチファイルを実行しても ftplogファイルに出力されるように したいのですが 何かいい方法はないでしょうか? 手動実行した場合のftplog.txt ftp> Connected to hoge open hoge 220 Microsoft FTP Service User (hoge:(none)): 331 Anonymous access allowed, send identity (e-mail name) as password. 230 Anonymous user logged in. ftp> Interactive mode Off . ftp> prompt cd /xxx/ 250 CWD command successful. ftp> put test.txt 200 PORT command successful. 150 Opening ASCII mode data connection for test.txt. 226 Transfer complete. ftp: 59523 bytes sent in 0.00Seconds 59523000.00Kbytes/sec. ftp> quit 221

  • 最新の更新履歴のファイルだけを送付

    Windows上で生成したファイルをLINUXサーバーにバッチ処理で定期的に転送しようと考えています。 タスクスケジューラーにtest.batを登録し、ftpcmd.txtで登録したサーバーに送ります。下記で問題なく送付できました。 【test.bat】 ftp -s:ftpcmd.txt 【ftpcmd.txt】 open 192.168.100.100 username password put c:\hpdata\*.csv bye csvファイルは1分ごとに新しいファイルが生成されますが、上記だと c:\hpdata\にあるすべてのデータを送付してしまいます。 最新の更新履歴のファイルだけを送付するためには、どのように書けばよいでしょうか? よろしくお願いいたします。

  • dosコマンドでのftp接続について

    コマンドプロンプト上でのftp接続について教えてください。 いろいろと調べて ****************************** [ftp.bat] ftp -s:ftpcmd.txt [ftpcmd.txt] open "IPアドレス" "ログイン名" "パスワード" put test.txt bye ****************************** でできることがわかりました。 しかし、上記のような方法の場合、ftpcmd.txtの中身を参照してしまうと使用者にアカウント、パスワードがわかってしまいます。 使用者にアカウント、パスワードがわからない形でコマンドプロンプト上でのftp接続ほうほうはないでしょうか。 (例えば、ftpcmd.txtを暗号化するとか…) ご教授をお願いします。

  • バッチファイルFTP -sで引数を渡せますか?

    どなたか教えて下さい。 TEST.batというバッチファイルの処理の中で、 FTP -s:D:\ABC.bat でファイルを指定して、FTPのputを実行させたいです。 putしたいファイルはTEST.bat内でsetで指定しています。そのsetで指定したファイルを引数などで、\D\ABC.batへ送る方法はないでしょうか?