【问题标题】:VBscript: Verifying that a file has been completely copied/error handlingVBscript:验证文件是否已完全复制/错误处理
【发布时间】:2012-07-02 19:37:47
【问题描述】:

我正在尝试向我的脚本中添加一些内容,以便让我知道我正在复制的文件是否已被完全复制。

基本上,我压缩了一堆文件,然后将它们发送到网络上的映射驱动器。然后,一旦成功复制了原始位置的文件,我的脚本就会删除它们。该脚本运行良好,但我只需要添加一些错误处理,让我知道复制是否未成功完成。

我从来没有在 vbscript 中使用过任何错误处理,因为我只有大约一周的时间,所以任何帮助都将不胜感激。如果我需要更深入地解释任何事情,请告诉我。我的脚本可以在下面找到:


Option Explicit


Dim sDirectoryPath, sDestinationPath, sOutputFilename, Shell, sFileExt, sFilePrefix

shell = WScript.CreateObject("WScript.Shell")

'指定要压缩的文件所在的目录路径 '指定压缩文件的目的地 '指定要查找的文件扩展名 '指定要查找的文件名前缀

sDirectoryPath = "C:\Testscripts\"
sDestinationPath = "C:\Script\files\outzips\"
sOutputFilename = shell.ExpandEnvironmentStrings("%COMPUTERNAME%")
sFileExt = ".evtx"
sFilePrefix = "Archive*"


Dim Command, RetVal
Dim d : d = Date() 
Dim dateStr : dateStr = Year(d) & "-" & Right("00" & Month(d), 2) & "-" & Right("00" &   Day(d), 2)
Dim t : t = Time()
Dim timeStr: timeStr = Hour(t) & "-" & Right("00" & Minute(t), 2) & "-" & Right("00" & Second(t), 2)



Command = """C:\Program Files\7-zip\7z.exe"" a  " & sDestinationPath & sOutputFilename & "-" & dateStr & "-" & timeStr & ".zip " & sDirectoryPath & sFilePrefix & sFileExt


        RetVal = Shell.Run(Command,0,true)

Wscript.Sleep 2000



Dim objFso  

Set objFSO = CreateObject("Scripting.FileSystemObject")

'将文件从一个路径复制到另一个路径

objFSO.CopyFile "C:\script\files\outzips\*.zip" , "G:\CopyTestFolder\"

If err.Number <> 0 Then
WScript.Echo "An error occured copying this file, re-attempt copy"
Else
WScript.Echo "No errors occured, copy successful"
End If
On Error GoTo 0

'文件被成功压缩和复制后指定删除位置 '旧的zip文件,以及要删除的本地存档文件夹路径

objFSO.DeleteFolder("C:\Script") 

'可以删除整个存档文件夹,也可以只删除文件夹中的 .zip 文件

objFSO.DeleteFile("C:\Testscripts\Archive*.evtx") 

'复制成功后需要删除的原始文件所在位置

【问题讨论】:

  • 我的回答是否足够,或者我错过了什么?

标签: error-handling vbscript copy verify


【解决方案1】:

在 7-zip 上使用“t”命令来验证完整性。如果 '0' ok,否则出错。

例如:

Set myshell = WScript.CreateObject("WScript.Shell")
Dim cmd, result
cmd = """C:\Program Files\7-zip\7z.exe"" t C:\NOT_a__valid_zip_file.zip"
result = myshell.Run(cmd,0,true)
Wscript.Echo "Not a valid zip file:  " & result

cmd = """C:\Program Files\7-zip\7z.exe"" t C:\a_valid_zip_file.zip"
result = myshell.Run(cmd,0,true)
Wscript.Echo "A valid zip file:  " & result

输出:

PS> cscript.exe .\7z.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

Not a valid zip file:  2
A valid zip file:  0

【讨论】:

  • 对不起,我明天要回到剧本,不得不处理工作中出现的一些问题。感谢您的回复,明天看看效果如何。
  • 你能帮我解释一下这方面的逻辑吗?这是否是说如果第一个命令为真(即文件被命名为无效的东西),那么它返回 wscript.echo “不是有效的 zip 文件:”,如果第二个 cmd 为真,那么它返回 wscript “一个有效的 zip 文件”的 .echo 我只是有点迷失了它在哪里做 if here
  • 还有我可以测试看看这是否有效吗?我可能只是在这里度过了一个可怕的早晨,但我想不出一种方法来让脚本运行并复制会产生错误的东西
  • 该示例只是表明您可以区分“坏”文件(即完整性测试返回“非 0”)和“好”文件(即完整性测试返回“0”)。您说您希望能够判断副本是否成功完成。您可以通过对复制的文件运行完整性测试('7z.exe t ')来做到这一点。如果复制成功完成(文件开始时很好),则测试将返回“0”,否则,您知道有问题(文件、开始或复制过程中) .
  • 就测试而言,我只是使用文本文件(即不是 zip 文件)来演示否定情况。您还可以创建一个 zip 文件,然后使用十六进制编辑器对其进行调整。但是,我认为使用非 zip 文件进行简单测试就足够了。
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2012-06-29
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多