2017-01-23 14 views
1

ファイル名は "Data_20170123_(乱数).csv"です。日付は毎日変わり、数字はランダムです。私は別のディレクトリにファイルのコピーを実行し、日付と乱数を取り出して名前を変更するバッチファイルを作成しようとしています。アステリックは9行目で動作していません。文字列またはInStrを使用してCopyFileを実行できますか?日付とワイルドカードを含むFileCopy

ご協力いただきありがとうございます。私のコードはこのように見えます。

On Error Resume Next 
Dim fso, ts 
Dim WshShell 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set WshShell = WScript.CreateObject("WScript.Shell") 
ts = timeStamp 

fso.CopyFile "C:\Temp\Data_" & ts & "_*.csv", "C:\Logs\Data.csv", True 

'====== 
Function timeStamp() 
    timeStamp = Year(Now) & _ 
       Right("0" & Month(Now), 2) & _ 
       Right("0" & Day(Now), 2) 
End Function 
'====== 
'this does work but it's using the random number so I need a wildcard? 
'fso.CopyFile "C:\Temp\Data_" & ts & "_11.csv", "C:\Logs\Data.csv", True 

答えて

2
Dim fso, ts, folder, file 
Dim WshShell 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set WshShell = WScript.CreateObject("WScript.Shell") 
ts = timeStamp 
Set folder = ofso.GetFolder("C:\temp") 
For Each file in folder.Files 
    If Left(file.name, 14) = "Data_" & ts & "_" And Right(file.Name, 4) = ".csv" Then 
     fso.CopyFile file.Path, "C:\Logs\Data.csv",True 
    End If 
Next 

Function timeStamp() 
    timeStamp = Year(Now) & _ 
    Right("0" & Month(Now),2) & _ 
    Right("0" & Day(Now),2) 
End Function 

上記のコードは、指定されたフォルダ内のすべてのファイルをチェックし、ファイル名の既知の部分に一致します。一致するファイルはすべて、特定の名前のターゲットフォルダにコピーされます。コピーが完了したらExit Forを使用してコードを高速化することもできます.1つのファイル名にしかコピーしないので、コピーするファイルが1つしかないと仮定しているので、正しいファイルを見つけたらループを終了します結構です。

あなたはWshShellオブジェクトをまったく使用していないので、どちらも必要ではありませんが、表示されていないコードの場合にはそれを残しておきます。

+1

ありがとう、Dave、それは魅力的に働いた。 –

関連する問題