はじめての親子ハイキングに挑戦!! >>

コマンドプロンプト初心者です。

今回、同じファイルをWebサーバー上の複数のフォルダにアップロードするバッチを組みたいのですが、「for」による繰り返し処理がうまくできません。

さらに具体的にいいますと「public_html/10」「public_html/11」「public_html/12」「public_html/13」それぞれに「AAA」というフォルダを作り、その中に「BBB.txt」というファイルをアップロードしたいのです。

なお、「public_html/10」に「AAA」というフォルダを作り、その中に「BBB.txt」というファイルをアップロードをおこなう、という一度だけの処理はできています。ですが、forを使い、繰り返し作業をおこなおうと試みるも、うまくいきません。

以下が作成したFTPコマンドです。
------------------------------
open XXX.XX.XX.XX
name
password

For /L %%a in(10,1,13) do (

cd /public_html/%%a
mkdir AAA
cd /public_html/%%a/AAA
put C:\BBB.txt BBB.txt)

EXIT      
------------------------------

お手数ですが、ご教授いただけますと幸いです。

よろしくお願いいたします。

A 回答 (1件)

FTPのコマンドと、バッチ(cmd.exe)のコマンドを混同してます。



FTPにはForはないので、バッチでFTPスクリプトファイルを作成するなどしてみては。
こんな感じ:

( echo open lambda
echo user me +password+
for /L %%a in (10,1,13) do (
echo cd /public_html/%%a
echo mkdir AAA
echo cd /public_html/%%a/AAA
echo put X:\BBB.txt
)
echo quit ) >ftp.rc
ftp -v -n -s:ftp.rc
「コマンドプロンプトの繰り返し処理について」の回答画像1

この回答への補足

ご回答、大変ありがとうございます。

ちなみに「open lambda」とは何をするコマンドなのでしょうか。

また「echo user me +password+」の箇所は
ユーザーネームを「EEE」、パスワードを「FFF」とすると
echo EEE me +FFF+
という記述でよろしいでしょうか。

お手数ですが、ご教授いただけますと幸いです。

補足日時:2011/07/20 02:40
    • good
    • 0
この回答へのお礼

ご回答、大変ありがとうございます。

ちなみに「open lambda」とは何をするコマンドなのでしょうか。

また「echo user me +password+」の箇所は
ユーザーネームを「EEE」、パスワードを「FFF」とすると
echo EEE me +FFF+
という記述でよろしいでしょうか。

お手数ですが、ご教授いただけますと幸いです。

お礼日時:2011/07/23 21:05

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

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

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

QExcel VBA セルの名前があるか無いかを知るには?

Excelのセル範囲に名前をつけています。
VBAで、Worksheetに名前"牛丼"が無ければ、処理をスキップしたいのですが、存在の有無を知る方法はあるでしょうか?

if 0 < Range("牛丼").column then
... ' これはダメでした(TT)

.Worksheet.Name はシート名のようですし...

Aベストアンサー

その1:エラー処理で対応
Sub Cells_Name4()
'エラートラップの設定
on error goto err1
'エラーが起こるかもしれない処理
Range("牛丼").Select
'エラートラップを解除
On Error GoTo 0
'エラーが起こらなかった場合の処理をして終了
msgbox("あります")
exit sub

'エラーが起こった場合の処理をして終了
err1:
msgbox("ありません")
End Sub

その2:名前を全部調べてフラグで判別

Sub Cells_Name()
Dim MyName As Name
Dim MyFlg As Boolen
MyFlg=False
'存在するかのチェック
For Each MyName In ActiveWorkbook.Names
if MyName="牛丼" then
MyFlg = True
Exit For
End If
Next
If Myflg = True Then
'存在する場合の処理
msgbox("あります")
else
'存在しない場合の処理
msgbox("ありません")
End If
End Sub

その1:エラー処理で対応
Sub Cells_Name4()
'エラートラップの設定
on error goto err1
'エラーが起こるかもしれない処理
Range("牛丼").Select
'エラートラップを解除
On Error GoTo 0
'エラーが起こらなかった場合の処理をして終了
msgbox("あります")
exit sub

'エラーが起こった場合の処理をして終了
err1:
msgbox("ありません")
End Sub

その2:名前を全部調べてフラグで判別

Sub Cells_Name()
Dim MyName As Name
Dim MyFlg As Boolen
MyFlg=False
'存在するかのチェック
For ...続きを読む

Qバッチファイルでユーザーに入力させた値を取得するには?

バッチファイルで処理を行い、処理の途中で
ユーザーに何かコードなどを入力させて
その値を取得して処理を行いたいのですが
そのような方法はありますでしょうか?

どなたか、よろしくお願いします。

Aベストアンサー

OSがWindows 2000/XP なら

echo 前処理
set /P IN=コードを入力してください:
echo 入力されたコードは %IN% です。

というふうに set コマンドで取得できます。

Windows 98/Me ですと標準のコマンドでは無理なので、フリーソフトを使うことになります。BATUTY なんかが有名です。(参考URL)

参考URL:http://www.vector.co.jp/soft/dos/util/se023753.html

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %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アドレス、ユーザ名等は本当のものに書き換えてください...続きを読む


人気Q&Aランキング