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

Recursion 递归vbs函数,用于保存特定名称的文件,而不删除旧文件,recursion,vbscript,Recursion,Vbscript,请,我搜索一个递归vbs函数,该函数将文件名作为输入,并在将其保存到文件系统之前检查该文件名是否存在于文件夹中。如果它已经存在于文件夹中,那么我们必须增加旧名称。我的目标是通过巧妙地增加下一个相似的文件名来保持相似的旧文件名 例如,在D:\test文件夹中,可能已经存在一个名为incFile.txt的文件名。要将它保存在D:\test中,我们必须首先检查这个文件是否还不存在到文件夹中;如果它已经存在,那么我们必须增加旧名称,如incFile-1.txt等 请看看我做了什么,希望不会打扰你。如果您

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

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

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

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

现在很好用!
谢谢。

我认为您的递归函数不会像您预期的那样工作,因为它会不断地在字符串中添加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

所以不是一个为我写代码的免费类型的网站。请展示您尝试过的内容,并描述您期望代码执行的操作,以及结果与您期望的不同。对不起,我写了一些东西。我没有复制的原因是,为了更好地理解我的问题,我不能只复制我编写的递归函数,但我必须复制我所做的一切。请看上面我所做的更新,希望不会打扰你。如果您想帮助我修复错误,您可以立即在计算机上复制并运行它,因为您拥有所有信息。非常感谢你
...
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