Windows 使用VBScript重命名和移动日志文件时出现问题

Windows 使用VBScript重命名和移动日志文件时出现问题,windows,vbscript,Windows,Vbscript,我在使用vbscript时遇到问题。 脚本重命名,然后将一些FTP日志文件从一个文件夹移动到另一个文件夹。 脚本正在运行,但后来我意识到我有一个名为delete_junkfiles.log的文件,但我不想重命名或移动此文件,只想将其保留在源文件夹中 目前,脚本正在重命名和移动所有文件。 脚本还抛出一个文件未找到错误,即使文件被重命名,然后被移动,如果可能的话,我也想解决这个问题 我知道,对于vbscript专家来说,这可能非常简单,但我对vbs相当陌生,我不知道如何忽略delete_junkfi

我在使用vbscript时遇到问题。 脚本重命名,然后将一些FTP日志文件从一个文件夹移动到另一个文件夹。 脚本正在运行,但后来我意识到我有一个名为delete_junkfiles.log的文件,但我不想重命名或移动此文件,只想将其保留在源文件夹中

目前,脚本正在重命名和移动所有文件。 脚本还抛出一个文件未找到错误,即使文件被重命名,然后被移动,如果可能的话,我也想解决这个问题

我知道,对于vbscript专家来说,这可能非常简单,但我对vbs相当陌生,我不知道如何忽略delete_junkfiles.log而不去管它。 如果你们能帮我的忙,我将不胜感激。 下面是我的剧本

Dim WshShell, FileManagement, BrowseDialogBox, SelectedFolder, OldString, NewString, FullPath, TheFolder, FileList
Dim File, ThisFile, TheString, AlreadyRenamed, TempName, FlagName, Success, FindFlag, NewName, Dummy

Set WshShell = WScript.CreateObject("WScript.Shell")
Set FileManagement = WScript.CreateObject ("Scripting.FileSystemObject")
Set BrowseDialogBox = WScript.CreateObject("Shell.Application")
Set SelectedFolder = BrowseDialogBox.BrowseForFolder(0, "Select the folder containing the files you want to rename.", &H0001)

If InStr(1, TypeName(SelectedFolder), "Folder") = 0 Then
Wscript.Quit
Else
OldString = InputBox("Enter the characters in the filename that you want to replace","Rename Files")
If OldString = "" Then Wscript.Quit

NewString = InputBox("Enter the characters that you want to replace them with","Rename Files")
If NewString = "" Then Wscript.Quit
End If

FullPath = SelectedFolder.ParentFolder.ParseName(SelectedFolder.Title).Path

Set TheFolder = FileManagement.GetFolder(FullPath)
Set FileList = TheFolder.Files
Success = 0


ThisFile = File.Name
TheString = InStr(ThisFile, OldString)
AlreadyRenamed = InStr(ThisFile, "%")

If (TheString <> 0) AND (AlreadyRenamed = 0) Then
Success = 1

TempName = Replace(ThisFile, OldString, NewString)
FlagName = "%" + TempName
File.Name = FlagName
End If
Next

For Each File in FileList
ThisFile = File.Name
FindFlag = InStr(ThisFile, "%")


If FindFlag <> 0 Then
NewName = Replace(ThisFile, "%", "")
File.Name = NewName
End If
Next

'Move the files
For Each File in FileList
FileManagement.MoveFile "C:\Users\lislej\Desktop\test_move\*.log", "C:\Users\lislej\Desktop\test_move_to\"
Next

If Success = 1 Then
Dummy = WshShell.Popup ("Rename Files operation complete!",5,"Rename Files",64)
Else
Dummy = WshShell.Popup ("Rename Files operation failed! Please repeat the operation.",0,"Rename Files",16)
End If

Wscript.Quit
Dim WshShell、文件管理、浏览对话框、选定文件夹、旧字符串、新闻字符串、完整路径、文件夹、文件列表
Dim文件、this文件、字符串、AlreadyRenamed、TempName、FlagName、Success、FindFlag、NewName、Dummy
设置WshShell=WScript.CreateObject(“WScript.Shell”)
设置FileManagement=WScript.CreateObject(“Scripting.FileSystemObject”)
Set BrowseDialogBox=WScript.CreateObject(“Shell.Application”)
设置SelectedFolder=BrowseDialogBox.BrowseForFolder(0,“选择包含要重命名的文件的文件夹”。,&H0001)
如果InStr(1,TypeName(SelectedFolder),“Folder”)=0,则
Wscript.Quit
其他的
OldString=InputBox(“在文件名中输入要替换的字符”,“重命名文件”)
如果OldString=“”,则Wscript.Quit
NewString=InputBox(“输入要替换为的字符”,“重命名文件”)
如果NewString=“”,则Wscript.Quit
如果结束
FullPath=SelectedFolder.ParentFolder.ParseName(SelectedFolder.Title).Path
Set offolder=FileManagement.GetFolder(完整路径)
Set FileList=offolder.Files
成功=0
ThisFile=File.Name
字符串=InStr(此文件,旧字符串)
AlreadyRename=InStr(此文件,“%”)
如果(字符串0)和(AlreadyRenamed=0),则
成功=1
TempName=Replace(此文件、旧字符串、新字符串)
FlagName=“%”+临时名称
File.Name=FlagName
如果结束
下一个
对于文件列表中的每个文件
ThisFile=File.Name
FindFlag=InStr(此文件,“%”)
如果FindFlag为0,则
NewName=Replace(此文件“%”,“”)
File.Name=NewName
如果结束
下一个
'移动文件
对于文件列表中的每个文件
FileManagement.MoveFile“C:\Users\lislej\Desktop\test\u move\*.log”,“C:\Users\lislej\Desktop\test\u move\u to\”
下一个
如果Success=1,则
Dummy=WshShell.Popup(“重命名文件操作完成!”,5,“重命名文件”,64)
其他的
Dummy=WshShell.Popup(“重命名文件操作失败!请重复该操作。”,0,“重命名文件”,16)
如果结束
Wscript.Quit

显示的代码似乎缺少一些内容,因为有一个
下一个
,没有
For
。但是文件移动部分是完整的,您应该在这里检查要跳过的文件名:

Set FileList = TheFolder.Files
'Move the files
For Each File in FileList
    If InStr(File, "delete_junkfiles") = 0 Then
        ' If "delete_junkfiles" is not find in the filename then do move file
        File.Move "C:\Users\lislej\Desktop\test_move_to\"
    End If
Next
更新:


我认为重命名文件后需要刷新文件列表?

我认为忽略
delete\u junkfiles.log
文件和文件未找到错误都可以通过更改来解决

'Move the files
For Each File in FileList
FileManagement.MoveFile "C:\Users\lislej\Desktop\test_move\*.log", "C:\Users\lislej\Desktop\test_move_to\"
Next

“移动文件”
对于文件列表中的每个文件
如果文件名为“delete_junkfiles.log”,则
FileManagement.MoveFile.Path,“C:\Users\lislej\Desktop\test\u move\u to\”
如果结束
下一个

基本上,您所做的是在每个文件中循环,但无论如何都要在
MoveFile()
调用中使用通配符。这可能导致找不到文件,因为第一次迭代将移动与模式匹配的所有文件。第二次迭代将找不到任何文件,因此出现错误。我添加了
if
以避免您想要忽略的文件。

谢谢@PatricK,你说得对,当我复制和粘贴代码时,它遗漏了for循环的一部分……谢谢你的帮助,但我认为我需要更好地解释我的问题。我已经描述了我遇到的问题,这是回复@Oracle的评论的一部分,谢谢again@JohnLisle经过一些思考,我认为在重命名文件列表后需要重新加载它们吗?你应该可以调用
File.Move
。你是一个传奇人物@PatricK,感谢heaps buddy,这就成功了,虽然它仍然重命名delete_junkfiles.log,但它没有被移动,这主要是我所关心的,我可以解决重命名问题,现在你已经指出了,这看起来很明显,哈哈,再次感谢Hanks@oracle certified professional,我尝试将您添加到我的代码中,它修复了我的文件未发现问题,谢谢,但它仍然重命名和移动所有内容。感谢@oracle我尝试将您添加到我的代码中,它修复了我的文件未发现问题,谢谢,但它仍然重命名和移动所有内容。我想我需要澄清一点基本上我有一个文件夹,里面有文件名为FTPPub1_aaplog.ftp.log、FTPPub1_netdesklog.ftp.log、TPurge.log、TPurge_Others.log和delete_junkfiles.log,除了delete_junkfiles.log之外的所有文件都应该重命名然后移动,然后用原始文件名重新生成日志文件,删除垃圾文件必须保持不变。我知道有一个简单的方法可以做到这一点,但我觉得我离问题太近了,哈哈
'Move the files
For Each File in FileList
    if File.Name <> "delete_junkfiles.log" then 
        FileManagement.MoveFile File.Path, "C:\Users\lislej\Desktop\test_move_to\"
    end if
Next