以下是VBScript代码。如果文件/文件夹存在,我会收到脚本错误,“文件已经存在”。
代码:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
Message = " Welcome to the AVG Update Module" & vbCR '1*
Message = Message & " *****************************" & vbCR & vbCR
Message = Message & " Click Yes to Copy Definition Files" & vbCR & vbCR
Message = Message & " OR " & vbCR & vbCR
Message = Message & " Click No to Update Definition Files." & vbCR & vbCR
Message = Message & " Click Cancel (ESC) to Exit." & vbCR & vbCR
X = MsgBox(Message, vbYesNoCancel, "AVG Update Module") '2*
'Yes Selected Script
If X = 6 then
objFSO.FolderExists("E:\Updates")
if TRUE then objFSO.CreateFolder ("E:\Updates")
objFSO.CopyFile "c:\Docume~1\alluse~1\applic~1\avg8\update\download\*.*",
"E:\Updates\" , OverwriteFiles
MsgBox "Files Copied Succesfully.", vbInformation, "Copy Success"
End If
'No Selected Script
If X = 7 then
objFSO.FolderExists("Updates")
if TRUE then objFSO.CreateFolder("Updates")
objFSO.CopyFile "E:\Updates\*.*", "Updates", OverwriteFiles
Message = "Files Updated Successfully." & vbCR & vbCR
Message = Message & "Click OK to Launch AVG GUI." & vbCR & vbCR
Message = Message & "Click Cancel (ESC) to Exit." & vbCR & vbCR
Y = MsgBox(Message, vbOKCancel, "Update Success")
If Y = 1 then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Progra~1\avg\avg8\avgui.exe" & Chr(34), 0
Set WshShell = Nothing
End if
If Y = 3 then WScript.Quit
End IF
'Cancel Selection Script
If X = 2 then
MsgBox "No Files have been Copied/Updated.", vbExclamation, "User Cancelled" '3*
End if
答案 0 :(得分:1)
如果文件夹不存在,如何创建文件夹
这是您的代码:
objFSO.FolderExists("E:\Updates")
if TRUE then objFSO.CreateFolder ("E:\Updates")
只需按顺序调用FolderExists
和CreateFolder
方法(CreateFolder
总是被调用,因为if TRUE
条件的计算结果为True)并且等于:
objFSO.FolderExists("E:\Updates")
objFSO.CreateFolder ("E:\Updates")
您想根据CreateFolder
方法的返回值来致电FolderExists
:
If Not objFSO.FolderExists("E:\Updates") Then
objFSO.CreateFolder "E:\Updates"
并仅复制源路径中新的或不存在的文件?
VBScript和FileSystemObject
对象都没有此功能。但是,可以使用WshShell.Run
方法从脚本中调用可以执行此操作的外部工具,例如xcopy
。我想你需要这样的东西:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "xcopy c:\Docume~1\alluse~1\applic~1\avg8\update\download\*.* E:\Updates\ /D", , True
如何插入用户名(第1点)
将消息文本与strUserName
变量值连接:
Message = " Welcome " & strUserName & " to the AVG Update Module" & vbCR
...
MsgBox "No Files have been Copied/Updated.", vbExclamation, strUserName & " Cancelled"
可以将按钮更改为复制,更新,取消而不是是,否,取消?(第2点)
不,VBScript的内置MsgBox
功能不支持自定义按钮。但是有一些解决方法:您可以使用HTA(HTML应用程序)创建自定义消息框,或使用InputBox
功能提示用户执行他们希望执行的任务。您可以找到示例here
我还要注意,您可以使用Select Case
语句检查MsgBox
返回值而不是多个If...Then...End If
语句来改进脚本。此外,使用像6或7这样的“幻数”是一种不好的做法 - 使用适当的常量代替。例如:
Select Case X
Case vbYes
...
Case vbNo
...
Case Else ' vbCancel
...
End Select
答案 1 :(得分:0)
当你说
时“仅复制新文件或执行此操作 在源路径中不存在?“
您是否只想将文件从源目录复制到目标目录(如果目标中不存在)?如果是这样,那就完成了
Const SourceFolder = "C:\Test1\"
Const DestinationFolder = "C:\Test2\"
Set fso = CreateObject("Scripting.FileSystemObject")
'Get a collection of al the files in the source directory
Set fileCol = fso.GetFolder(SourceFolder).Files
'Loop through each file and check to see if it exists in the destination directory
For Each objFile in fileCol
If NOT fso.FileExists(DestinationFolder & objFile.Name) Then
'If the file does not exist in the destination directory copy it there.
objFile.Copy DestinationFolder
Else
If objFile.DateLastModified > fso.GetFile(DestinationFolder & objFile.Name).DateLastModified Then
'If the file is newer than the destination file copy it there
objFile.Copy DestinationFolder, True
End If
End If
Next
Set fileCol = Nothing
Set fso = Nothing
添加了请求的日期检查。