为什么这个剧本疯了?

时间:2011-04-08 16:19:20

标签: vbscript

噢,伙计!

这是一个VBScript,它应该更改目录中名为

的所有文件

1229_002510至2010-12-29_002510

最终发生的事情是脚本永远不会终止。

在一次通过文件名之后,它将KEPT GOING并在2010年 - 多个时间之前预先设定,直到我杀死了该脚本。

只有在cmd 下通过CScript启动脚本时才会出现该错误。

(使用:cscript“filename.vbs”启动)

所以现在我有一些像这样的文件 2010-20-10-20-10-20-10-20-10-20-10-20-10-20-10-20-10-20-10-20-10-11-26_023335

意识到我是一个VBScript noob。

脚本似乎在测试模式下工作(只是打印文件名),但只要您对实际文件有效,它就会表现出所描述的行为。

' shell script that changes dates like
' 1219_005530 to 2010-12-19_005530



' create a root filesystemobject:
Dim ofso
Set ofso = CreateObject( "Scripting.FileSystemObject" ) 

' create a folder object USING that root filesystem object
Dim folder

' that's the current directory
Set folder = ofso.GetFolder( "." )

' now, visit each file in the folder
Dim fileo
For Each fileo In folder.Files

  dim originalName
  originalName = CStr( fileo.Name )

  ' cut first 2 chars, prepend 2010-, re-add first 2 chars + "-"
  dim monthNumber
  monthNumber = Mid( originalName, 1, 2 )

  ' don't change the source file!
  If Right( originalName, 3 ) = "vbs" Then
    WSH.echo( "Not changing " & originalName )
  Else
    dim newName
    newName = "2010-" & monthNumber & "-" & Mid( originalName, 3 )

    WSH.echo( originalName )
    WSH.echo( newName & " < CHANGED TO" )


    ' ONLY ENABLE THIS LINE ONCE DEBUGGING COMPLETE  
    'fileo.Name = newName   
  End If

  Next

' PAUSE BEFORE EXIT  

2 个答案:

答案 0 :(得分:0)

我不知道你的dit,但我复制/粘贴你的脚本,它的工作方式与你的预期一致。 (Windows 7)

编辑:尝试设置脚本可以循环的时间的最大值。这将解决它。可能是脚本将重命名的文件视为新文件,从而创建了无限循环。

答案 1 :(得分:0)

您可以分两步执行此任务。首先扫描目录中的文件并将其名称收集到数组中,然后运行此数组并重命名文件。这应该更可靠。

并考虑切换到JScript。与之相比,VBS只是丑陋。