vbs 实现文件夹拷贝--采用堆栈不递归
时间:2022-07-26
本文章向大家介绍vbs 实现文件夹拷贝--采用堆栈不递归,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
' 将 c 文件夹 复制到B目录下的某日期的文件夹下 如 b2016-7-25c
FolderLoopCopy "C:UserscaoyaDesktoptest1","C:UserscaoyaDesktoptest2"
Const srcSplit = ""
Sub FolderLoopCopy(srcF,desF)
WScript.Echo " Ready Copy Folder: " + srcF
Dim oFso,oFolder,oSubFolders,oFiles,n
Dim countSize,nowSize
n = 0 ' 操作次数
Set oFso = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFso.GetFolder(srcF)
countSize = oFolder.size+1
nowSize = 1
'生成日期文件夹
nowTime = year(Now)&"-"&Month(Now)&"-"&day(Now)&"-"&Hour(Now)&"-"&Minute(Now)&"-"&Second(Now)
exFolderName = desF + srcSplit + nowTime
Call MyCreateFolder(oFso,exFolderName)
WScript.Echo " "&n&" create folder: " + exFolderName
n = n + 1
exFolderName = exFolderName + srcSplit
Dim srcFolder
Set srcFolder = new MyFolder
srcFolder.Path = oFolder.Path
srcFolder.Name = oFolder.Name
srcFolder.exPath = exFolderName
'建立一个堆栈对象
Dim fStack,exFolderName
Set fStack = new MyStack
fStack.push srcFolder
'准备遍历堆栈
Do While fStack.Count > 0
'获取栈顶文件夹
set tempF = fStack.Pop
'WScript.Echo tempF.Path
'获取栈顶文件夹路径对象
set oFolder = oFso.GetFolder(tempF.Path)
'创建相对应文件夹
tempFolderPath = tempF.makeCopyFolderPath()
WScript.Echo " "&n&" create folder: " + tempFolderPath
n = n + 1
Call MyCreateFolder(oFso,tempFolderPath)
'获取子文件和子文件夹
set oSubFolders = oFolder.SubFolders
set oFiles = oFolder.Files
For Each oFile In oFiles
tempFileName =tempFolderPath + srcSplit + oFile.Name
nowSize = nowSize + oFile.size
WScript.Echo " "&n&" "&nowSize/countSize*100&"% create file: " + tempFileName
n = n + 1
oFile.Copy(tempFileName)
Next
For Each oSubFolder In oSubFolders
Dim tempFolder
set tempFolder = new MyFolder
tempFolder.Path = oSubFolder.Path
tempFolder.Name = oSubFolder.Name
tempFolder.exPath = tempFolderPath + srcSplit
fStack.push tempFolder
Next
Loop
Set oFolder = Nothing
Set oSubFolders = Nothing
Set oFso = Nothing
Set tempF = Nothing
WScript.Echo "Copy Folder: " + srcF + " done "
End Sub
'---------------------方便创建和复制-------------------------------
Sub MyCreateFolder(fso,folderName)
if not fso.FolderExists(folderName) Then
fso.CreateFolder(folderName)
End If
End Sub
Sub MyCopyFolder(fso,srcF,desF)
if fso.FolderExists(desF) Then
fso.CopyFolder srcF,desF
End If
End Sub
'------------------------------文件夹类-------------------------------------
Class MyFolder
Private Str_Path
Private Str_Name
Private Str_exPath '复制的路径前缀
'Property Get语句,获取属性值或对象引用,Default只与Public一起使用,表示该属性为类的默认属性
Public Property Get Path ' 完全路径
Path = Str_Path
End Property
Public Property Get Name ' 文件夹的名字
Name = Str_Name
End Property
Public Property Get exPath ' 文件夹的名字
exPath = Str_exPath
End Property
'Property Let语句,设置属性值
Public Property Let Path(New_Path)
Str_Path = New_Path
End Property
Public Property Let Name(New_Name)
Str_Name = New_Name
End Property
Public Property Let exPath(New_exPath)
Str_exPath = New_exPath
End Property
Public Sub ToString()
WScript.Echo "Path:"+Path+" Name: "+Name
End Sub
Public Function makeCopyFolderPath()
makeCopyFolderPath = exPath + Name
End Function
Public Function makeCopyFilePath(fileName)
makeCopyFilePath = exPath + Name + srcSplit + fileName
End Function
End Class
'------------------------------文件夹类-------------------------------------
'----------------------------堆栈-------------------------------------
Const MAX_STACK = 1024
Class MyStack
Public top '声明变量top
Public bottom '声明变量now
Public stack(1024) '声明堆数组
'类方法
Public Sub push(temp)
if top < MAX_STACK Then
SET stack(top) = temp
top = top + 1
Else
WScript.Echo "push(temp):stack gone max......"
End if
End Sub
Public Function pop()
if top > bottom Then
SET pop = stack(top-1)
top = top - 1
Else
pop = 0
WScript.Echo "pop():stack gone bug......"
End if
End Function
Public Function Count()
Count = top - bottom
End Function
End Class
'----------------------------堆栈-------------------------------------
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThinkPHP5.1表单令牌Token失效问题的解决
- PHP设计模式之工厂模式(Factory Pattern)的讲解
- keras K.function获取某层的输出操作
- 浅谈sklearn中predict与predict_proba区别
- 解决Keras中循环使用K.ctc_decode内存不释放的问题
- PDO::getAvailableDrivers讲解
- PDO::_construct讲解
- Yii2.0实现的批量更新及批量插入功能示例
- PDO::inTransaction讲解
- 小程序前后端交互使用JWT
- python文件操作seek()偏移量,读取指正到指定位置操作
- 使用OpenCV去除面积较小的连通域
- 使用vs code编辑调试php配置的方法
- Python OpenCV去除字母后面的杂线操作
- PDO::rollBack讲解