2012-01-05 37 views
1

私は仕事中の仕事を自動化しようとしています。一般的にVBScriptを使用してファイルを自動的に検索して移動する

は、ここで私が行うためのスクリプトを必要なものです:

  1. 前日の日付を取得し、書式YYYYMMDD
  2. 内のすべての中に、与えられた名前で
  3. 検索フォルダを入力します。いくつかの異なる場所に4つの特定のファイル
  4. コピーこれらのファイルのその場所の下にフォルダ

のTh私が探している4つのファイルは、2つの異なるフォルダにあります。 3 in 1、他方では1。これらのフォルダの名前は、他のソフトウェアによって生成されたときに入れられたキューに応じて毎日変更されます。別のスクリプトを実行できるように、これらのファイルを移動する必要があります。私はこれを達成する方法を考え出すのに困っている。誰でもいくつかのアイデアがありますか?

+0

私は現在の日付を引いて1を引いて、そのフォルダを入力できるスクリプトを持っています。その後、私は立ち往生した。私のVBSはむしろかなり錆びていて、かなり長い間使用されていないので、コマンドが何をすることができるのかを正確に覚えている。 – YodaEXE

答えて

1

興味深いファイルを含むフォルダがあなたの日付ディレクトリのサブフォルダている場合は、ネストされたループを使用することができます

Dim sDFolder : sDFolder = "..\data\20110105" 
    Dim dicFiNa : Set dicFiNa = CreateObject("Scripting.Dictionary") 
    dicFiNa("1.txt") = "" 
    dicFiNa("3.txt") = "" 
    dicFiNa("5.txt") = "" 
    Dim oRDir  : Set oRDir = goFS.GetFolder(sDFolder) 
    Dim oSDir 
    For Each oSDir In oRDir.SubFolders 
     Dim oFile 
     For Each oFile In oSDir.Files 
      WScript.Echo "looking at", oFile.Path 
      If dicFiNa.Exists(oFile.Name) Then 
      WScript.Echo "found", oFile.Name, "will copy" 
      End If 
     Next 
    Next 

を出力:

looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\6.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\5.txt 
found 5.txt will copy 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\4.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\3.txt 
found 3.txt will copy 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\2.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\1.txt 
found 1.txt will copy 

フル再帰徒歩もう少しだろうあなたがそれを必要とするならば、そう言ってください。ちょうど楽しみのため


:再帰バージョン:

Dim sDFolder : sDFolder = "..\data\20110105" 
    Dim dicFiNa : Set dicFiNa = CreateObject("Scripting.Dictionary") 
    dicFiNa("1.txt") = "" 
    dicFiNa("3.txt") = "" 
    dicFiNa("55.txt") = "" 
    Dim oRDir  : Set oRDir = goFS.GetFolder(sDFolder) 
    walk oRDir, dicFiNa, "whatever you need to copy the files" 

Sub walk(oDir, dicFiNa, vCargo) 
    Dim oItem 
    For Each oItem In oDir.Files 
     WScript.Echo "looking at", oItem.Path 
     If dicFiNa.Exists(oItem.Name) Then 
     WScript.Echo "found", oItem.Name, "will copy" 
     End If 
    Next 
    For Each oItem In oDir.SubFolders 
     walk oItem, dicFiNa, vCargo 
    Next 
End Sub 

出力:

looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\6.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\whatever\5.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\4.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\unknown\3.txt 
found 3.txt will copy * 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\2.txt 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\1.txt 
found 1.txt will copy * 
looking at E:\trials\SoTrials\answers\8750206\data\20110105\puzzle\deep\deeper\55.txt 
found 55.txt will copy * 

(*)とすぐに権限の問題が解決されます。

+0

これまでのところ素晴らしい作品です。私は物事を望む方法にそれを微調整するためにいくつかのものを修正しなければならなかったが、偉大になる。私の唯一の問題は、実際にファイルをコピーしようとすると、パーミッション拒否エラーが発生するということです。それを回避する方法に関するアイデア? – YodaEXE

+0

@YodaEXE:明らかに、ファイルが使用/ロックされているか、(rプロセス)が宛先への書き込みが許可されていない場合、ファイルをコピーすることはできません。エラーメッセージがさらに情報を提供していませんか?どのような種類のファイルを扱っていますか? –

+0

私はパーミッションエラーが出てきたのでVBSで作業することができませんでしたが、実際のコピーを行ったバッチファイルを実行するためにちょっと修正しました。どうもありがとう! – YodaEXE

関連する問題