2017-01-23 93 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

非常感谢大卫,它的工作就像魅力。 –