ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

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
のように書き換えても同じくループされます。

わかる方いらっしゃいますでしょうか?
よろしくお願いします。

A 回答 (2件)

こんにちは。



ftp.bat を以下の通り修正すれば、正常に動作するようになります。

---FTP.bat---
(1)pause
(2)ftp.exe -n -s:aaa.txt
(3)pause

(2)で、拡張子を省略されていましたが
省略した場合、同名のバッチファイル(ftp.bat)が優先的に実行されるので
無限ループに陥ったのだと思われます。
    • good
    • 0
この回答へのお礼

ftp.exeより優先してbatファイルが実行されていたのですね。解決できました。ありがとうございました。

お礼日時:2005/04/15 17:57

FTP.bat



FTPLS.bat
などに名前を変更する
    • good
    • 0
この回答へのお礼

ftp.exeより優先してbatファイルが実行されるのでbatファイルの名称を変更してもOKですね。解決できました。ありがとうございました。

お礼日時:2005/04/15 17:58

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QバッチファイルにてFTPで指定したファイルを取得する

OSはWindoswXPProです。
以下のようなBATファイルとバッチファイルを作成しました。

---FTP.bat---
echo off
ftp -s:get.ftp

---get.ftp---
open 10.0.X.X
username
password
cd /log
get log.yymmdd(実際には日付) c:\access_all_log.txt
quit


logというディレクトリには日次でログファイルが作成され
ファイル名としてlog.yymmddと名づけられています。

やりたいことは2つあります。
1つめはftpするファイル名の日付部分をコマンドなどから
範囲指定して取得するファイルを指定できないか。
(たとえば070301~070315のファイルを一括で取得したい)
2つ目はftpでのファイル取得終了後に続いて
バッチスクリプトを流したいのですが、その方法。

お分かりになる方いらっしゃいましたらよろしくお願いいたします。

Aベストアンサー

バッチで日付を扱うのはけっこう難しいですよね。
VBSで、
・指定した期間内のログファイルをftpでgetするftp.getファイルを生成し、
・getした複数のログファイルを copy で1つのファイル(c:\access_all_log.txt)にまとめ、個々のログファイル(log.yymmdd)を削除するバッチファイルを生成
するスクリプトを作ってみました。

まず、MakeGetFtp.vbs という名前で、以下の内容のファイルをバッチファイルと同じディレクトリに作成してください。(IPアドレス、ユーザ名等は本当のものに書き換えてください)

----------------------------------------------
Dim strDate(2)
Dim argDate(2)
Dim TmpDate,d, i,logfile
Dim FSO,FtpFile,CopyBat
Dim GetStr,CopyStr,DelStr

'引数の数チェック
If WScript.Arguments.Count <> 2 Then
WScript.Echo("開始日付と終了日付を指定してください")
WScript.Quit(1)
End If

'各スクリプト、バッチファイルに渡す日付パラメータの作成
For i = 1 to 2
strDate(i) = Wscript.Arguments.Item(i - 1)
If Not IsNumeric(strDate(i)) or _
Len(strDate(i)) <> 6 Then
WScript.Echo(CStr(i) & "番目の日付の書式が間違っています。")
WScript.Quit(1)
End If
argDate(i) = DateValue("20" & Left(strDate(i),2) & "/" & _
Mid(strDate(i),3,2) & "/" & Right(strDate(i),2))
Next

'初期化
CopyStr = "Copy "
DelStr = "Del "

'FTPのgetコマンド、BATのCOPYコマンド、DELコマンドを作成
For d = argDate(1) to argDate(2)
TmpDate = FormatDateTime(d,2)
TmpDate = Mid(TmpDate,3,2) & Mid(TmpDate,6,2) & Mid(TmpDate,9,2)
logfile = "log." & TmpDate
GetStr = GetStr & "get " & logfile & vbCrlf
CopyStr = CopyStr & logfile & "+"
DelStr = DelStr & logfile & " "
Next

'FTPコマンドをファイルに出力
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.CreateTextFile("get.ftp")
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.CreateTextFile("get.ftp")
.WriteLine("open 10.0.X.X")
.WriteLine("username")
.WriteLine("password")
.WriteLine("cd /log")
.WriteLine(GetStr)
.WriteLine("quit")
.Close
End With

CopyStr = Left(CopyStr,Len(CopyStr)-1) & " c:\access_all_log.txt"

With FSO.CreateTextFile("TmpCopy.bat")
.WriteLine("@echo off")
.WriteLine(CopyStr)
.WriteLine(DelStr)
.Close
End With

Set FSO = Nothing
----------------------------------------------

そして、FTPを行うバッチファイルを以下の内容にしてください。

----------------------------------------------
@echo off
cscript MakeGetFtp.vbs %1 %2
if %errorlevel% EQU 1 goto end
ftp -s:get.ftp
TmpCopy.bat
:end
----------------------------------------------

上記のバッチファイルの名前を、ftpget.bat とすると、

ftpget.bat 070301 070315
と日付を指定して実行すると、その期間のログをFTPでgetし、c:\access_all_log.txt にまとめられます。

バッチで日付を扱うのはけっこう難しいですよね。
VBSで、
・指定した期間内のログファイルをftpでgetするftp.getファイルを生成し、
・getした複数のログファイルを copy で1つのファイル(c:\access_all_log.txt)にまとめ、個々のログファイル(log.yymmdd)を削除するバッチファイルを生成
するスクリプトを作ってみました。

まず、MakeGetFtp.vbs という名前で、以下の内容のファイルをバッチファイルと同じディレクトリに作成してください。(IPアドレス、ユーザ名等は本当のものに書き換えてください...続きを読む

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

いつもお世話になっております。
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の中では環境変数は使えないとのことですし、悩んでいます。

取得するファイルは日付毎のディレクトリに入っていて、取得後も日付毎のディレクトリに保管するので日付の指定が必要なのですが。

[ftpget.bat]------------------------------------------
ftp-s:ftpget.bat
open ホスト名
ユーザー名
パスワード
bin
prompt

cd /~対象ホストのディレクトリ~/YYYYMMDD/host1
!mkdir C:\YYYY...続きを読む

Aベストアンサー

一時ファイルをつくる方法ですが、引数に日付を与えられるよう書き直してみました。

:[ftpget.bat]------------------------------------------
if "%1"=="" exit /b
echo open ホスト名>ftpget.txt
echo ユーザー名>>ftpget.txt
echo パスワード>>ftpget.txt
echo bin>>ftpget.txt
echo prompt>>ftpget.txt
echo cd /~対象ホストのディレクトリ~/%1/host1>>ftpget.txt
echo !mkdir C:\%1>>ftpget.txt
echo lcd C:\%1>>ftpget.txt
echo mget *.txt>>ftpget.txt
echo quit>>ftpget.txt

ftp -s:ftpget.txt
del ftpget.txt
----------------------------------------------------
引数の正当性のチェックはしていません。引数を指定しない場合は何もせずに終了します。

一時ファイルをつくる方法ですが、引数に日付を与えられるよう書き直してみました。

:[ftpget.bat]------------------------------------------
if "%1"=="" exit /b
echo open ホスト名>ftpget.txt
echo ユーザー名>>ftpget.txt
echo パスワード>>ftpget.txt
echo bin>>ftpget.txt
echo prompt>>ftpget.txt
echo cd /~対象ホストのディレクトリ~/%1/host1>>ftpget.txt
echo !mkdir C:\%1>>ftpget.txt
echo lcd C:\%1>>ftpget.txt
echo mget *.txt>>ftpget.txt
echo quit>>ftpget.txt

ftp -s:f...続きを読む

QFTPでリモートのファイル一覧取得

BashでFTPでリモートに接続し、リモートの対象フォルダ内のファイル一覧をローカルフォルダ内にファイルとして出力するにはどうしたらいいのでしょうか?
教えて下さい。

Aベストアンサー

bashということは、Unix系のコマンドライン操作ですね。

ftpコマンド処理を自動化するようにして、その標準出力をファイルにリダイレクトすればできると思います。
例えば、ftp.batに以下の内容を書いておきます。
---------------------------------------
open ftp.hoge.com
user USER PASSWD
cd DST_DIR
ls
---------------------------------------
※ USERはftpサーバのユーザ名です。
※ PASSWDはftpサーバのパスワードです。
※ DST_DIRはlsしたい対象ディレクトリ(のフルパス)。

このファイルを使って、-nオプション付きでftpプログラムを以下のように実行します。

ftp -n < ftp.bat > ls.txt

ls.txtには、目的のディレクトリでlsした結果が書き込まれます。

「ftpコマンド処理を自動化する」については、参考URLを見てください。Windowsの標準のftpでも同じことができますが、ちょっとお行儀が違うようです。Windowsについては、以下を参考にしてください。
http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html

参考URL:http://www.zdnet.co.jp/help/tips/linux/l0462.html

bashということは、Unix系のコマンドライン操作ですね。

ftpコマンド処理を自動化するようにして、その標準出力をファイルにリダイレクトすればできると思います。
例えば、ftp.batに以下の内容を書いておきます。
---------------------------------------
open ftp.hoge.com
user USER PASSWD
cd DST_DIR
ls
---------------------------------------
※ USERはftpサーバのユーザ名です。
※ PASSWDはftpサーバのパスワードです。
※ DST_DIRはlsしたい対象ディレクトリ(のフルパス)。

このファ...続きを読む

QteratermマクロをVBAで実行

teratermマクロについてご教示願います。

teratermマクロを組んで、Linuxサーバにログインして処理をする.ttlファイルを作成しようと思っています。
その.ttlファイルを、VBAのプログラムから実行することは可能でしょうか?

やりたいことは、EXCELのシート上にある「実行」ボタンを押下すると、VBAからteratermマクロが実行される、という処理です。

可能かどうか教えてください。また、もしご存じであればその際の
VBAの組み方も同時にご教示いただければと思います。
よろしくお願いいたします。

Aベストアンサー

/Mオプション付で Shellで起動すればいいのでは

Shell "TeraTermのフルパス /M=マクロファイル"
といった具合でしょう

Qftpコマンド出力結果の取得

ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、
リダイレクション等を用いても取得できません。
どのようにすればいいか教えてください。

**************状況*************
OSおよびOSレベル:AIX5.2
シェル:Kシェル

コマンドファイルの中身(ftp.txt)
cat << EOF | ftp -n
open SERVER
user USER PW
cd PATH
ls -l
bye
EOF

SERVER:実際のサーバー名
USER:実際のユーザー名
PW:実際のパスワード
PATH:実際のパス

これを以下のように実行し、結果を取得しようとしました。
# ./cmd.ftp > log

しかし、出力ファイルlogの中身はカラっぽでした。

ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。

何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、
リダイレクション等を用いても取得できません。
どのようにすればいいか教えてください。

**************状況*************
OSおよびOSレベル:AIX5.2
シェル:Kシェル

コマンドファイルの中身(ftp.txt)
cat << EOF | ftp -n
open SERVER
user USER PW
cd PATH
ls -l
bye
EOF

SERVER:実際のサーバー名
USER:実際のユーザー名
PW:実際のパスワード
PATH:実際のパス

これを以...続きを読む

Aベストアンサー

以前の質問に答えてから、手動でやってもできるなと気付きました。creさんの環境でできるか分かりませんが、試してみてください。
コマンドラインから、
ftp SERVER | tee ftp.log
としてください。あとは普通に手動でftp操作をします。ただし私の環境では、ログイン時のユーザ名入力のプロンプトが表示されませんでしたが、表示されているものとしてユーザ名を入力したら、パスワードを聞いてきました。あとは普通にftp操作をして終了すれば、全ての操作履歴がftp.logに記録されます。

結果報告お待ちしてます。

Qバッチファイルでサーバーのファイルをクライアントへコピーしたい

サーバーに保存されているファイルを、
クライアントのCドライブへコピーしたい。

各クライアントにバッチファイルを配布して、
それを実行するだけでコピーされるようにしたいのです。

初心者で申し訳ないのですが、何卒よろしくお願いします。
------------------------

下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。
しかし、コピー先はバッチファイルを実行したクライアントのローカルディレクトリにしたいのです。

copy \\サーバー名\フォルダ名\ファイル名 C:\

Aベストアンサー

>下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。

そんなはずはありません。何かの勘違いでしょう。

>copy \\サーバー名\フォルダ名\ファイル名 C:\

だと、バッチファイルを実行したPCのC:\にコピーされます。

copy \\サーバー名\フォルダ名\ファイル名 C:
と、最後の \ を削れば、バッチファイルがあるのと同じディレクトリにコピーされます。

QFTPコマンドでディレクトリごとファイル移動できるコマンドはありますか?

タイトルどおりなのですが、FTPでファイルを転送する際に、サブフォルダを含むディレクトリごとファイル転送するコマンドはありますでしょうか。
ディレクトリの中にあるすべてのファイルを移動したいのですが、サブフォルダがたくさんあるので、わざわざディレクトリの場所へ移動してmputを繰り返すのはめんどうで仕方ありません。
よろしくお願いします。

Aベストアンサー

ご使用になるOS環境が書いてないのですが、Linux,BSD等ならncftpで、get -R dir。
Windowsならffftpを使えば良いと思います。

QシェルスクリプトでFTPの実行結果を取得するには

OS redhat linux
シェル bornシェル

でftpを実行するスクリプトを作っていますが、
ftpの実行結果は取得できるのでしょうか?

ftp -n < ftpCom.txt

宜しくお願いします。

Aベストアンサー

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラーが発生しました" >> logfile
exit 1
fi

みたいなことをしていました。grep の引数 ^226 は行頭が226から始まる行を検索、という意味で、grepでマッチする行があった場合は0が戻り値となり、マッチしなければ0以外が戻り値となるので、それを利用していました。

実際の運用では、処理が異常終了したときにlogfileを見て、FTPのエラーだったらさらにftpLog.txtを見る、みたいな感じでした。

なお、FTPサーバが返すコードについては下記RFCの4.2辺りを参照してください。もっとも、サーバによってこれら全てが実装されてるとは限りませんが。

http://hp.vector.co.jp/authors/VA002682/rfc959j.htm

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラー...続きを読む

QWSHファイルからFTPを利用してダウンロードする

batファイル,もしくはWSHファイルを使用してのFTPサーバからのファイルダウンロードを行う際の記述方法について質問致します。

行いたいことはFTPサーバ側に日毎のディレクトリが作成され
その中に格納されるテキストファイルを自動でローカルの指定ディレクトリに上書きする手順になります。
WSHに関しては全くの素人なので非常に苦戦しております…

FTPサーバ側
/@day/*.txt
@dayには本日の日付が2桁で入ります。
1月1日なら01、2月23日なら23

Local保存側
D:\temp

お手すきの時にでもご教授頂ければ幸いです。

Aベストアンサー

FTPコマンドには詳しくないのですがWSHはわかります。手順はこんな感じでしょうか。

(1)FTPコマンドを記述したファイルのテンプレートを作成しておく。
(2)WSHでテンプレートから本日のFTPのためのファイルを作成する。
(3)WSHでFTP -s:ファイル名 ホスト名 を実行する。

そこで(2)の方法ですけれども、例えばFTPコマンドを記述したファイルが C:\FTPtemplate.txt にあり、その中に本日の日付にしたい文字 @day が埋め込んであるものとします。@day を本日の日付2桁に書き換えて C:\FTPtoday.txt を作成するWSH JScriptは下記になります。

// FTPreplace.js
var Ifile="C:\\FTPtemplate.txt";
var Ofile="C:\\FTPtoday.txt";
var Fs =WScript.CreateObject("Scripting.FileSystemObject");
var ForReading=1, ForWriting=2;
var Itxt, Otxt, Iall, Oall, dd, re;

Itxt=Fs.OpenTextFile(Ifile, ForReading);
Iall=Itxt.ReadAll();
Itxt.Close();

dd=(new Date()).getDate().toString(10); if (day.length==1) day="0"+day;
re=/@day/gm;
Oall=Iall.replace(re, dd); // 全ての@dayを今日のddに置き換える

Otxt=Fs.OpenTextFile(Ofile, ForWriting, true); // 上書き
Otxt.Write(Oall);
Otxt.Close();
// ここまで

あとはWSHのRunメソッドでFTPコマンドを実行すればよいと思います。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/wsmthrun.asp

FTPコマンドには詳しくないのですがWSHはわかります。手順はこんな感じでしょうか。

(1)FTPコマンドを記述したファイルのテンプレートを作成しておく。
(2)WSHでテンプレートから本日のFTPのためのファイルを作成する。
(3)WSHでFTP -s:ファイル名 ホスト名 を実行する。

そこで(2)の方法ですけれども、例えばFTPコマンドを記述したファイルが C:\FTPtemplate.txt にあり、その中に本日の日付にしたい文字 @day が埋め込んであるものとします。@day を本日の日付2桁に書き換えて C:\FTPtoday.txt を作成す...続きを読む

Qコマンドプロンプトを使ったFTPの自動化(応用)

バッチファイルを作成して、FTPでファイルをサーバーにアップする事は旨く行きました。

以下のサイトを参考にしました。
http://www.ponko2.com/ftp_bat.html


ただ、応用しようと思って行き詰っております。

複数のサーバー(100個以上ある)にファイルをアップロードしたいのですた、
同じファイルを複数作るのではなく、もっと効率のよい方法が無いかと思って質問させていただきます。


私の理想としては、サーバー情報を書いたテキストファイル(1行1サーバー情報)を用意して、
そこから1行ずつ読み込んで実行していくというプログラムは書けないのでしょうか?

テキストファイルには、1行ずつ以下の情報を入れます。
「FTP先サーバー,ID,パスワード,アップロードする場所,ファイルの場所」


これを1行ずつ読み込んで、実行していくという事って可能でしょうか?

以下のデータの★の部分をテキストから読み込んで、テキストの行が終わるまで実行し続けてほしいです。


open ★(FTP先サーバー)
★(ログインユーザー名)
★(パスワード)
asc
prompt

cd ★(アップロードする場所)\aaa
lcd ★(ファイルの場所)\aaa
mput *

cd ★(アップロードする場所)\bbb
lcd ★(ファイルの場所)\bbb
mput *


。。。複数のフォルダがあるのでその中のファイルをすべてアップロードしていく

bye



わかる方居ましたら教えていただけると助かります。

バッチファイルを作成して、FTPでファイルをサーバーにアップする事は旨く行きました。

以下のサイトを参考にしました。
http://www.ponko2.com/ftp_bat.html


ただ、応用しようと思って行き詰っております。

複数のサーバー(100個以上ある)にファイルをアップロードしたいのですた、
同じファイルを複数作るのではなく、もっと効率のよい方法が無いかと思って質問させていただきます。


私の理想としては、サーバー情報を書いたテキストファイル(1行1サーバー情報)を用意して、
そこから1行ずつ読み込ん...続きを読む

Aベストアンサー

可能かと言えば可能です。ファイルを読んでファイルを書きそれを実行させる。

for /f "delims=, tokens=1-5" %%A in (テキストファイル.txt) do (
(echo open %%A
echo %%B
echo %%C
echo ascii
echo prompt
echo cd %%D\aaa
echo lcd %%E\aaa
echo mput *
echo cd %%D\bbb
echo lcd %%E\bbb
echo mput *
echo quit
) > ftpcommands.txt
ftp -s:ftpcommands.txt >>ftplog.txt
)


人気Q&Aランキング