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

あなたの再帰関数は、数値をインクリメントする代わりに文字列に「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
于 2013-08-29T23:16:26.987 に答える
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 に答える