vbs拷贝指定文件并重命名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vbs拷贝指定文件并重命名相关的知识,希望对你有一定的参考价值。

set fso=createobject("scripting.filesystemobject")
do
fso.copyfile "D:\*.txt","F:\bak\*.txt"

wscript.sleep 1000*60*1
loop

这一串代码已经实现拷贝,现在需要才这个过程中添加语句,在拷贝文件之后,将其命名为"n.txt", 其中 n 为变量,并且每次执行后自增量为 1.
fso.copyfile "D:\*.txt","F:\bak\"n".txt"可以实现直接命名,但如何实现 n 变量的自增?

3楼的语句未结束~~~~我一直被这个问题困惑,定义变量的格式不对?

参考技术A set fso=createobject("scripting.filesystemobject")
dim filename1 ,filename2 as string
i=1
do
filename1="d:\" & i & ".txt"
filename2="F:\bak\" & i & ".txt"
fso.copyfile filename1,filename2
i=i+1
wscript.sleep 1000*60*1
loop
参考技术B fso.copyfile "D:\*.txt","F:\bak\*.txt"
这句改为:fso.copyfile "D:\*.txt","F:\bak\n.txt"
参考技术C 用name或filecopy命令

VBS获取指定目录下最新文件拷贝然后以当前日期命名

VBS获取指定目录下最新文件拷贝然后以当前日期命名

近期有个需求,想对数据的备份目录中数据再次远程拷贝到计算机上,所以我们就通过vbs脚本将备份目录下的最新文件拷贝到指定目录,然后以当前的系统日期命名,总结为下:

我们在D盘下的data目录下有系统的备份文件,然后以日期命名,我们想通过获取文件的最后 一次修改时间进行获取最新文件,然后进行拷贝

然后拷贝到指定目录中,我们也可以拷贝到远程计算机

我们在本地进行测试,在D盘下的databackup中即可

代码送上:

sourcefilespath="D:\\data"
\'desfilepath="\\\\x.x.x.x\\Backup\\DataBackup"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\\"
desfilepath="D:\\dbbackup\\"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\\"
Set dic=CreateObject("Scripting.Dictionary")
Set fso=CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(desfilepath) Then
	fso.CreateFolder desfilepath

End If

backFolderPath=GetLastModify(sourcefilespath)
fso.CopyFile backFolderPath,desfilepath&fso.GetFileName(backFolderPath)
msgbox "Finish"

\'\'移动文件
Function MoveFiles(yPath,sPath)
	On Error Resume Next
	Dim folder,Files,File,subFolder,subFolders
	Set fso = createobject("scripting.FileSystemObject")
	Set Folder = fso.getFolder(yPath)
	Set Files = Folder.Files
	\'msgbox yPath & sPaht
	For Each File In Files
		fso.MoveFile File,sPath&"\\"
		\'msgbox File
	Next
	Set subFolder = Folder.SubFolders
	For Each subFolders In subFolder
		folderTemp = Split(subFolders,"\\")
		FolderName=FolderTemp(ubound(folderTemp))
		fso.createFolder(sPath&"\\"&FolderName)
		MoveFiles subFolders,sPath&"\\"&FolderName&"\\"
		fso.DeleteFolder subFolders
	Next
End Function


Function GetLastModify(folder)
    Set fso = createobject("scripting.FileSystemObject")       
    Set Folder=fso.getFolder(folder)
    Set subFolders = Folder.Files
    nowdate= Now
    For Each subFolder In subFolders
        dic.Add datediff("s",subFolder.DateLastModified,nowdate),subFolder.path
    Next        
    NumArray=dic.Keys
    bn = NumArray(0)       
    For Each nn In NumArray
        If bn >= nn Then
            bn = nn
        End If
    Next
    GetLastModify = dic.Item(bn)
End Function

Function fSortArray(aSortThisArray)
	Dim oArrayList, iElement
	Set oArrayList = CreateObject( "System.Collections.ArrayList" )
	For iElement = 0 To UBound(aSortThisArray)
	oArrayList.Add aSortThisArray(iElement)
	Next
	oArrayList.Sort
	set fSortArray = oArrayList
End Function

\'\'拷贝文件
Function CopyFiles(yPath,sPath)
	On Error Resume Next
	Dim folder,Files,File,subFolder,subFolders
	Set fso = createobject("scripting.FileSystemObject")
	Set Folder = fso.getFolder(yPath)
	Set Files = Folder.Files
	\'msgbox yPath & sPaht
	For Each File In Files
		fso.copyFile File,sPath&"\\"
		\'msgbox File
	Next
	Set subFolder = Folder.SubFolders
	For Each subFolders In subFolder
		folderTemp = Split(subFolders,"\\")
		FolderName=FolderTemp(ubound(folderTemp))
		fso.createFolder(sPath&"\\"&FolderName)
		CopyFiles subFolders,sPath&"\\"&FolderName&"\\"
		\'fso.DeleteFolder subFolders
	Next
End Function

我们执行脚本后,发现以日期命名,然后将最新的数据拷贝到了这个文件夹路劲下

如果一个脚本想实现不同目录的数据拷贝的话,我们也可以通过以下方式写,我们有两种,第一种不正规的写法

sourcefilespath="D:\\test"
\'desfilepath="\\\\10.12.0.51\\Backup\\DataBackup"&""&Year(date)&-Month(date)&-Day(date)&"
"&Hour(time)&-Minute(time)&"\\"
desfilepath="e:\\data1\\"&""&Year(date)&-Month(date)&-Day(date)&"
"&Hour(time)&-Minute(time)&"\\"
Set dic=CreateObject("Scripting.Dictionary")
Set fso=CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(desfilepath) Then
fso.CreateFolder desfilepath
 
End If
 
backFolderPath=GetLastModify(sourcefilespath)
fso.CopyFile
backFolderPath,desfilepath&fso.GetFileName(backFolderPath)
msgbox "Finish"
 
sourcefilespath2="D:\\test2"
\'desfilepath="\\\\10.12.0.51\\Backup\\DataBackup"&""&Year(date)&-Month(date)&-Day(date)&"
"&Hour(time)&-Minute(time)&"\\"
desfilepath2="e:\\data2\\"&""&Year(date)&-Month(date)&-Day(date)&"
"&Hour(time)&-Minute(time)&"\\"
Set dic=CreateObject("Scripting.Dictionary")
Set fso=CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(desfilepath2) Then
fso.CreateFolder desfilepath2
 
End If
 
backFolderPath=GetLastModify(sourcefilespath2)
fso.CopyFile
backFolderPath,desfilepath2&fso.GetFileName(backFolderPath)
msgbox "Finish"
 
\'\'移动文件
Function MoveFiles(yPath,sPath)
On Error Resume Next
Dim folder,Files,File,subFolder,subFolders
Set fso =
createobject("scripting.FileSystemObject")
Set Folder = fso.getFolder(yPath)
Set Files = Folder.Files
\'msgbox yPath & sPaht
For Each File In Files
fso.MoveFile File,sPath&"\\"
\'msgbox File
Next
Set subFolder = Folder.SubFolders
For Each subFolders In subFolder
folderTemp = Split(subFolders,"\\")
FolderName=FolderTemp(ubound(folderTemp))
fso.createFolder(sPath&"\\"&FolderName)
MoveFiles
subFolders,sPath&"\\"&FolderName&"\\"
fso.DeleteFolder subFolders
Next
End Function
 
 
Function GetLastModify(folder)
    Set fso =
createobject("scripting.FileSystemObject")      
    Set
Folder=fso.getFolder(folder)
    Set subFolders =
Folder.Files
    nowdate= Now
    For Each subFolder In
subFolders
        dic.Add
datediff("s",subFolder.DateLastModified,nowdate),subFolder.path
    Next       
    NumArray=dic.Keys
    bn = NumArray(0)      
    For Each nn In NumArray
        If bn >= nn Then
            bn = nn
        End If
    Next
    GetLastModify =
dic.Item(bn)
End Function
 
Function fSortArray(aSortThisArray)
Dim oArrayList, iElement
Set oArrayList = CreateObject(
"System.Collections.ArrayList" )
For iElement = 0 To UBound(aSortThisArray)
oArrayList.Add aSortThisArray(iElement)
Next
oArrayList.Sort
set fSortArray = oArrayList
End Function
 
\'\'拷贝文件
Function CopyFiles(yPath,sPath)
On Error Resume Next
Dim folder,Files,File,subFolder,subFolders
Set fso =
createobject("scripting.FileSystemObject")
Set Folder = fso.getFolder(yPath)
Set Files = Folder.Files
\'msgbox yPath & sPaht
For Each File In Files
fso.copyFile File,sPath&"\\"
\'msgbox File
Next
Set subFolder = Folder.SubFolders
For Each subFolders In subFolder
folderTemp = Split(subFolders,"\\")
FolderName=FolderTemp(ubound(folderTemp))
fso.createFolder(sPath&"\\"&FolderName)
CopyFiles
subFolders,sPath&"\\"&FolderName&"\\"
\'fso.DeleteFolder subFolders
Next
End Function

我们可以看见,如果有多个目录的话,我们把函数以外的数据进行了多条执行,但是这样不科学,我们可以采用arry的方式,所以修改见下:

sourcefilespath = Array("D:\\data" , "D:\\data2")
desfilepath = Array("D:\\dbbackup\\"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\\" , "D:\\dbbackup\\"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\\")
Set dic=CreateObject("Scripting.Dictionary")
Set fso=CreateObject("Scripting.FileSystemObject")
For Each destfold In desfilepath
If Not fso.FolderExists(desfilepath) Then
fso.CreateFolder desfilepath
End If
Next
WScript.Quit
For Each srcfile In sourcefilespath
backFolderPath=GetLastModify(srcfile)
For Each destfold In desfilepath
fso.CopyFile backFolderPath,destfold&fso.GetFileName(destfold)
next
next
msgbox "Finish"
\'\'移动文件
Function MoveFiles(yPath,sPath)
On Error Resume Next
Dim folder,Files,File,subFolder,subFolders
Set fso = createobject("scripting.FileSystemObject")
Set Folder = fso.getFolder(yPath)
Set Files = Folder.Files
\'msgbox yPath & sPaht
For Each File In Files
fso.MoveFile File,sPath&"\\"
\'msgbox File
Next
Set subFolder = Folder.SubFolders
For Each subFolders In subFolder
folderTemp = Split(subFolders,"\\")
FolderName=FolderTemp(ubound(folderTemp))
fso.createFolder(sPath&"\\"&FolderName)
MoveFiles subFolders,sPath&"\\"&FolderName&"\\"
fso.DeleteFolder subFolders
Next
End Function
Function GetLastModify(folder)
    Set fso = createobject("scripting.FileSystemObject")       
    Set Folder=fso.getFolder(folder)
    Set subFolders = Folder.Files
    nowdate= Now
    For Each subFolder In subFolders
        dic.Add datediff("s",subFolder.DateLastModified,nowdate),subFolder.path
    Next        
    NumArray=dic.Keys
    bn = NumArray(0)       
    For Each nn In NumArray
        If bn >= nn Then
            bn = nn
        End If
    Next
    GetLastModify = dic.Item(bn)
End Function
Function fSortArray(aSortThisArray)
Dim oArrayList, iElement
Set oArrayList = CreateObject( "System.Collections.ArrayList" )
For iElement = 0 To UBound(aSortThisArray)
oArrayList.Add aSortThisArray(iElement)
Next
oArrayList.Sort
set fSortArray = oArrayList
End Function
\'\'拷贝文件
Function CopyFiles(yPath,sPath)
On Error Resume Next
Dim folder,Files,File,subFolder,subFolders
Set fso = createobject("scripting.FileSystemObject")
Set Folder = fso.getFolder(yPath)
Set Files = Folder.Files
\'msgbox yPath & sPaht
For Each File In Files
fso.copyFile File,sPath&"\\"
\'msgbox File
Next
Set subFolder = Folder.SubFolders
For Each subFolders In subFolder
folderTemp = Split(subFolders,"\\")
FolderName=FolderTemp(ubound(folderTemp))
fso.createFolder(sPath&"\\"&FolderName)
CopyFiles subFolders,sPath&"\\"&FolderName&"\\"
\'fso.DeleteFolder subFolders
Next
End Function


以上是关于vbs拷贝指定文件并重命名的主要内容,如果未能解决你的问题,请参考以下文章

怎样用asp实现,下载指定网址文件,并重命名后保存到本地服务器上?

怎么用bat复制指定的一个文件到指定文件夹,并重命名?

shell定时下载ftp文件并重命名放到指定文件夹

solrCloud

VBS 重命名一个文件夹内的全部文件

R语言使用fs包的file_move函数对指定文件进行重命名(rename)使用file_move函数将指定文件从一个位置拷贝(copy)到另一个位置