VBScript:检查脚本停止原因的方法?
我已经运行了这个程序,但是,当它正在处理时,它会随机停止,并要求用户点击空格键,让它显示其余正在进行的输出 我怎样才能知道为什么会发生这种情况 以下是脚本的副本:VBScript:检查脚本停止原因的方法?,vbscript,Vbscript,我已经运行了这个程序,但是,当它正在处理时,它会随机停止,并要求用户点击空格键,让它显示其余正在进行的输出 我怎样才能知道为什么会发生这种情况 以下是脚本的副本: 'On Error Resume Next Dim arrFolders() intSize = 0 Function StampNow() Dim Hr, Mn, Yr, Mon, Dy, Date1 Date1=Now() Hr=DatePart("h",Date1) Mn=DatePart("n",Date1) Yr =
'On Error Resume Next
Dim arrFolders()
intSize = 0
Function StampNow()
Dim Hr, Mn, Yr, Mon, Dy, Date1
Date1=Now()
Hr=DatePart("h",Date1)
Mn=DatePart("n",Date1)
Yr = DatePart("yyyy",Date1)
Mon = DatePart("m",Date1)
Dy = DatePart("d",Date1)
StampNow = Yr & "-" & Mon & "-" & Dy
end function
'Output log info.
Function OutputToLog (strToAdd)
Dim strDirectory,strFile,strText, objFile,objFolder,objTextFile,objFSO
strDirectory = "c:\log"
strFile = "\dpadmin_copy2run-"& StampNow & ".bat"
'strText = "dpadmin_copy2"
strText = strToAdd
' Create the File System Object.
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Check that the strDirectory folder exists.
If objFSO.FolderExists(strDirectory) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFolder = objFSO.CreateFolder(strDirectory)
'WScript.Echo "Just created " & strDirectory
End If
If objFSO.FileExists(strDirectory & strFile) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
'Wscript.Echo "Just created " & strDirectory & strFile
End If
set objFile = nothing
set objFolder = nothing
' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile _
(strDirectory & strFile, ForAppending, True)
' Writes strText every time you run this VBScript.
objTextFile.WriteLine(strText)
objTextFile.Close
End Function
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
strFolderName = "D:\1\production\Openjobs"
Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")
dim diffindates
'Init vars for regex.
Dim retVal, retVal2
Dim Lastprop
Dim objRegExpr 'regex variable
Set objRegExpr = New regexp
Set objRegExprX31 = New regexp
objRegExpr.Pattern = "[0-9][0-9][0-9][0-9][0-9][0-9][A-Z][A-Z][A-Z]"
objRegExprX31.Pattern = "[0-9][0-9][0-9][0-9][0-9][0-9]X31"
objRegExpr.Global = True
objRegExprX31.Global = True
objRegExpr.IgnoreCase = True
objRegExprX31.IgnoreCase = True
'Variables for getting last accessed property.
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
'Current time vars.
Dim currenttime
currenttime = Now()
ParentFolder = "D:\1\Production\Openjobs\ClosedJobs"
For Each objFolder in colSubfolders
intSize = intSize + 1
retVal = objRegExpr.Test(objFolder.Name)
retVal2 = objRegExprX31.Test(objFolder.Name)
if (retVal OR retVal2 ) then
'set filename to array
strFolderName = objFolder.Name
'Get last modified date.
Set f = fs.GetFolder(objFolder.Name)
Lastprop = f.DateLastModified
'MsgBox(Lastprop)
if ( DateDiff("m", f.DateLastModified, Now()) > 4) then
diffindates = DateDiff("m", f.DateLastModified, Now())
Set objShell = CreateObject("Shell.Application")
Set objCopyFolder = objShell.NameSpace(ParentFolder)
OutputToLog("rem " & f.DateLastModified & ":" & objFolder.Name )
outputtolog("move /Y """ & objFolder.Name & """ " & ParentFolder)
wscript.echo(diffindates & ":" & objFolder.Name & vbCr)
end if
end if
Next
更新
它停在以下线路上:
Set objTextFile = objFSO.OpenTextFile _
(strDirectory & strFile, ForAppending, True)
错误为Microsoft VBScript运行时错误:权限被拒绝
我对此有点困惑。日志文件只有356kb,第一步是删除所有全局On Error Resume Next语句。如果我们能看到脚本,就会得到更好的反馈。我可以多次运行您的脚本,而不会暂停输入。使用
//X
标志运行脚本以在调试器中启动它:
>cscript //nologo //X dpadmin_copy2.vbs"
然后,您应该能够逐步完成代码
您还可以开始将wscript.echo
trace语句放在任何地方,看看是否可以缩小等待的范围
有一件事让我在过去;如果您的命令控制台处于快速编辑模式,并且您意外地单击了控制台窗口中的任意位置,控制台将在等待您按键时挂起。当文本文件已经有来自其他进程的打开句柄时,或者因为您之前在代码中打开了未关闭的句柄,尝试写入文本文件时,您通常会被拒绝权限。我还没有尝试过这个方法,但我不知道为什么它不起作用,您可以看看使用fromsysinternals(Microsoft)来告诉您哪个进程具有文件的开放句柄。有关如何使用Handle的更多参考信息,请参见此处:您还可以编写第二个脚本,在循环中运行,以监视主脚本。第二个脚本可以通过执行WMI进程查询来验证第一个脚本,该查询只返回与定义的命令行匹配的进程。然后,第二个脚本可以重新启动主脚本,它会停止、提醒您、记录文件、启动句柄搜索等。在原始问题中添加了一份脚本副本。我注释掉了“下一步继续出错”,但它仍然会随机停止,直到我按空格键使其继续。这看起来不像完整的脚本。OutputToLog函数在哪里?如何调用脚本?您是直接从命令控制台(通过cscript?wscript?)运行它,还是有一个.bat文件“包装器”?我使用cscript运行它。为了节省格式化空间,我特意省略了outputtolog函数。我们如何确切地知道没有什么东西导致问题?在暂停之前是否有任何输出?对于用于启动命令控制台的快捷方式,请单击标题栏中的图标并选择“属性”。在“选项”选项卡上,确保未选中“快速编辑”模式。单击“确定”并选择修改快捷方式。再次启动它,QuickEdit将关闭。