递归vbs用于保存特定名称的文件而不删除旧文件

时间:2013-08-29 03:15:23

标签: recursion vbscript

请搜索一个递归的vbs函数,该函数将文件名作为输入,并在将其保存到文件系统之前检查它是否存在于文件夹中。如果它已经存在于文件夹中,那么我们必须增加旧名称。我的目标是通过巧妙地增加下一个相似的文件名来保留类似的旧文件名。

例如,在“D:\ test”文件夹中,它可能已经存在一个名为“incFile.txt”的文件名。要将其保存在“D:\ test”中,我们首先必须检查该文件夹中是否还存在该文件夹;如果它已经存在那么我们必须将旧名称增加为“incFile-1.txt”,依此类推。

请在那里看看我做了什么,希望这不会打扰你。如果您想帮助我修复错误,您可以立即在计算机上复制并运行它,因为您拥有所有信息。

dim readparam,mySavingName,concatene      'global variable

Set fso= CreateObject("Scripting.FileSystemObject")
set objF=fso.opentextfile("fileList.txt",1)
Do Until objF.AtEndOfStream
readparam = objF.readline
saveStrategy readparam
Loop

Sub saveStrategy(aFileName)

dim xmlDoc,objDoc

mySavingName=aFileName
mySavingName=recursion(mySavingName)
concatene="GAME-"&mySavingName

Set xmlDoc=createObject("MSXML2.DOMDocument")
Set oCreation = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xmlDoc.insertBefore oCreation, xmlDoc.childNodes.Item(0)
Set objDoc = xmlDoc.createElement("Racine")
xmlDoc.appendChild(objDoc)

Set obj = _
xmlDoc.createElement("GAME-PLAY") 
obj.Text=aFile
objDoc.appendChild obj

xmlDoc.save(concatene)

'delete object after processing here on each line read from fileList.txt
Set xmlDoc=Nothing
Set oCreation=Nothing
Set objDoc=Nothing
end Sub

function recursion(mySavingName)
dim shift
shift=0
concatene="GAME-"&mySavingName
if fso.FileExists(concatene) Then
shift=shift+1
mySavingName=mySavingName&shift
nextSavingName=recursion(mySavingName)
Else
nextSavingName=mySavingName
End If
recursion=nextSavingName
end function

fileList.txt  'The inputs are the file names (inside the same folder as the .vbs program file)
konan
batman
casper
batman

Output Expected
GAME-konan
GAME-batman
GAME-casper
GAME-batman-1

Output Get with my code
GAME-

我运行此程序时没有来自prompt命令的错误。但是我的程序结果与预期结果不同。如果您有任何疑问,请不要犹豫,并提前感谢您的关注和帮助。

2 个答案:

答案 0 :(得分:0)

我看到了我的错误。我已经取代了条件结构

Do Until objF.AtEndOfStream
  readparam = objF.readline
  saveStrategy readparam
  Loop

Do While Not objF.AtEndOfStream
readparam = objF.readline
saveStrategy readparam
Loop 

现在工作正常! 感谢。

答案 1 :(得分:0)

我认为你的递归函数不会像你期望的那样工作,因为它会一直向字符串添加“1”而不是递增数字,即它会生成GAME-xxx1,然后生成GAME-xxx11,然后是GAME-xxx111等等。此外,迭代比递归容易得多,所以我实现了这样的检查:

...
concatene = GetSavingName("GAME-" & aFileName)
...

Function GetSavingName(mySavingName)
  savingName = mySavingName
  i = 0
  Do While fso.FileExists(savingName)
    i = i + 1
    savingName = mySavingName & i
  Loop
  GetSavingName = savingName
End Function