2017-01-23 47 views
1

該文件名爲:「Data_20170123_(隨機數)的.csv」。日期每天都在變化,而且這個數字是隨機的。我試圖創建一個批處理文件,將執行文件複製到另一個目錄,並通過取出日期和隨機數命名。星號不在第9行。FileCopy帶有日期和通配符

我可以使用Left字符串或InStr來執行CopyFile

我很感謝你的幫助。我的代碼看起來像這樣。

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一旦複製完成,以加快代碼以及很好。

你不使用你的WshShell對象在所有所以它不需要任何,但我把它單獨的情況下,這是你還沒有表現出部分代碼。

+1

非常感謝大衛,它的工作就像魅力。 –