1

请,我搜索一个递归 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-

我运行这个程序时提示命令没有错误。但是我的程序的结果与预期的结果不同。请如果您有任何问题,请不要犹豫,非常感谢您的关注和帮助。

4

2 回答 2

0

我已经看到了我的错误。我已经替换了条件结构

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

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

它现在工作正常!谢谢。

于 2013-08-29T18:41:39.007 回答
0

我不认为你的递归函数会像你期望的那样工作,因为它不断地将“1”附加到字符串而不是增加数字,即它会生成GAME-xxx1, then GAME-xxx11, thenGAME-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
于 2013-08-29T23:16:26.987 回答