WSHでこんなことってできますでしょうか?


1.下記1-1の場所にフォルダ、ファイルが多数あります。
「2010年01月分」~「2010年05月分」を除いて
たとえば今月であれば「2010年06月分」という当月のフォルダ中に
移動させたいです。
※上記フォルダは月度が変わるごとにどんどん追加されます。

※アクセス権や使用中で移動できないファイル・フォルダがあった場合は、
 移動をさせずスキップするとうれしいです。

1-1 \\192.1.0.1\Data



2.下記2-1のフォルダにある2-2というファイルを
 2-3フォルダに移動をさせたいです

2-1 \\192.1.0.1\Data

2-2 log_201006070100.log
     ※log_のあとは「年号」「日付」「時間」という12桁の数字で1時間ごとに作成されます。

2-3 \\192.1.0.1\Log


この2つの動作がスクリプトファイルを開いたときに
実施されるとうれしいです。

どうぞよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/06/07 20:12:01
  • 終了:2010/06/08 00:38:34

回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912010/06/07 22:26:17

ポイント1200pt

一応仕様通りに作成してみましたが、二つの処理が同じフォルダに対する処理となっていましたので、

ログファイルを優先してLogフォルダへ移動するために、実行順序を逆にしています。


実際は異なるフォルダへ処理であるなら、処理1と処理2を逆に書いても動作は同じになります。


Option Explicit
'//-------------------------------------------------
'// パスの定義
'//-------------------------------------------------
Const UNC_1_1 = "\\192.168.100.2\Data"
Const UNC_2_1 = "\\192.168.100.2\Data"
Const UNC_2_3 = "\\192.168.100.2\Log"

'//-------------------------------------------------
'// 共通オブジェクトの作成
'//-------------------------------------------------
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim objEx
    Set objEx = new RegExp

    Dim srcFolder
    Dim dstFolder
    Dim ff

'// --- エラー停止を無効
    On Error Resume Next


'//-------------------------------------------------
'// 処理 2
'//-------------------------------------------------
'//--- ログファイルの形式を  log_数字12桁.log   に想定
    objEx.pattern = "^log_\d{12}.log$"

    srcFolder = UNC_2_1 & "\"
    dstFolder = UNC_2_3 & "\"

'//--- ログファイルの移動
    For Each ff In fso.GetFolder( srcFolder ).Files
        If objEx.Test(ff.Name) Then
            fso.MoveFile ff.Path, dstFolder
        End If
    Next

'//-------------------------------------------------
'// 処理 1
'//-------------------------------------------------
'//--- フォルダ形式を YYYY年MM月分  に想定(月も2桁に限定)
    objEx.pattern = "^\d{4}年\d{2}月分$"
    srcFolder = UNC_1_1
    dstFolder = UNC_1_1 & "\" & Year(Date) & "年" & Right( "0" & Month(Date), 2) & "月分\"

'//--- 当月のフォルダがなければ作成
    If Not fso.FolderExists( dstFolder ) Then
         fso.CreateFolder dstFolder
    End If

'//--- ファイルの移動
    For Each ff In fso.GetFolder( srcFolder ).Files
        fso.MoveFile ff.Path, dstFolder
    Next

'//--- フォルダの移動
    For Each ff In fso.GetFolder( srcFolder ).SubFolders
        If Not objEx.Test(ff.Name) Then
            fso.MoveFolder ff.Path, dstFolder
        End If
    Next
id:ohtsu6

Mookさま

できました。

いつもありがとうございます。

2010/06/08 00:35:51
  • id:koriki-kozou
    koriki-kozou 2010/06/07 22:20:44
    相手によってやりかたは変わるよ
    ・192.1.0.1 との通信に使うプロトコルがSMB(Windowsのファイル共有)
    ・192.1.0.1 との通信に使うプロトコルがFTP
    どこに設置するかでもやりかたは変わるよ
    ・192.1.0.1にWSHスクリプトを置いて192.1.0.1上から起動する
    ・192.1.0.1にWSHスクリプトを置いてクライアントから起動する
    ・クライアントにWSHスクリプトを置いて起動する
    ログを定期的に振り分けするなら192.1.0.1上で動くスクリプトを作ってタイマー起動するように設置するほうが楽だとは思うけど、192.1.0.1のOSすらも判らないから、どうしたものか
  • id:ohtsu6
    koriki-kozouさま

    ありがとうございます。

    ・192.1.0.1 との通信はSMBとなります。
    ・クライアントにWSHスクリプトを置いて起動するイメージです。
    ・192.1.0.1のOSは・・・
     バッファローのネットワークのハードディスクを使用しています。

    どうぞよろしくお願いいたします。


  • id:Mook
    アドレスがテスト環境のままになっていますので、実際のアドレスに変更ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません