在 Vbs 中创建 txt 文件时更改名称(如果存在)

change name if exists when creating a txt file in Vbs

我想制作一个获取用户输入并将其保存在文本文档中的程序,每次保存新文档时我都希望更改文件名

这是我的资料:

Option Explicit

Dim fso
Dim firstNameInput
Dim lastNameInput
Dim count
Dim testPath
Dim exists
Dim fileName
Dim fileStream
Dim filePath

Set fso = CreateObject("Scripting.FileSystemObject")

firstNameInput = inputbox("Please enter your name")
lastNameInput = inputbox("Enter your last name")

count = 1
do
    testPath = "C:\Users\Me\Desktop\Info\peopleInfo" & count & ".txt"
    exists = fso.FolderExists(testPath)
    if(exists) then
        count + 1
    else
        exit do
    end if
loop

fileName = "peopleInfo" & count & ".txt"
filePath = "C:\Users\Me\Desktop\Info\"
Set fileStream = fso.CreateTextFile(filePath & fileName)

fileStream.WriteLine firstNameInput
fileStream.WriteLine lastNameInput
fileStream.Close

我的好像没用...

所以每次我打开这个程序时,我希望它把文件保存为 peopleInfo1 然后 peopleInfo2 然后 peopleInfo3 等等

计数总是从 1 开始,因为您这么说。 Count = 1。将计数存储在文件中。

尝试类似的方法:

    Option Explicit
    Const RootFolder = "C:\Users\Me\Desktop\Info"
    Dim fso,Folder,FirstFile,sFile,sFileNewName,firstNameInput,lastNameInput
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(RootFolder) Then
        fso.CreateFolder(RootFolder)
    End If
    Set Folder = fso.GetFolder(RootFolder)
    Do
        firstNameInput = inputbox("Please enter your name")
    Loop Until firstNameInput <> ""

    Do
        lastNameInput = inputbox("Enter your last name")
    Loop Until lastNameInput <> ""

    FirstFile = RootFolder &"\peopleInfo.txt"
    If Not fso.FileExists(FirstFile) Then
        Call Write2File(RootFolder & "\peopleInfo.txt")
    Else
        sFileNewName = GetNewName(FirstFile)
        Call Write2File(sFileNewName)   
    End If
    '************************************************************************************************************
    Function GetNewName(sFile)
        Dim snamebase,sname,Count,sTarget,MaxIncrementation
        MaxIncrementation = 1000
        snamebase = Split(Right(sFile, Len(sFile) - InStrRev(sFile,"\")),".")(0)
        sname = snamebase
        Count = 0
        While Count < MaxIncrementation
            sTarget = Folder & "\" & sname & ".txt"
            If fso.FileExists(sTarget) Then
                Count = Count + 1
                sName = snamebase & "(" & Count & ")"
            Else
                GetNewName = sTarget
                Exit Function
            End If
        Wend
    End Function
    '************************************************************************************************************
    Sub Write2File(File)
        Dim fileStream
        Set fileStream = fso.CreateTextFile(File)
        fileStream.WriteLine firstNameInput
        fileStream.WriteLine lastNameInput
        fileStream.Close
    End Sub
    '************************************************************************************************************

或者类似的东西:

Option Explicit
Dim Ws,fso,RootFolder,Folder,FirstFile,sFile,sFileNewName,firstNameInput,lastNameInput,Desktop
Set Ws = CreateObject("Wscript.Shell")
RootFolder = Ws.ExpandEnvironmentStrings("%USERPROFILE%\Desktop\Info")
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(RootFolder) Then
    fso.CreateFolder(RootFolder)
End If
Set Folder = fso.GetFolder(RootFolder)
Do
    firstNameInput = inputbox("Please enter your name")
Loop Until firstNameInput <> ""

Do
    lastNameInput = inputbox("Enter your last name")
Loop Until lastNameInput <> ""

FirstFile = RootFolder &"\peopleInfo.txt"
If Not fso.FileExists(FirstFile) Then
    Call Write2File(RootFolder & "\peopleInfo.txt")
Else
    sFileNewName = GetNewName(FirstFile)
    Call Write2File(sFileNewName)   
End If
'************************************************************************************************************
Function GetNewName(sFile)
    Dim snamebase,sname,Count,sTarget,MaxIncrementation
    MaxIncrementation = 1000
    snamebase = Split(Right(sFile, Len(sFile) - InStrRev(sFile,"\")),".")(0)
    sname = snamebase
    Count = 0
    While Count < MaxIncrementation
        sTarget = Folder & "\" & sname & ".txt"
        If fso.FileExists(sTarget) Then
            Count = Count + 1
            sName = snamebase & "(" & Count & ")"
        Else
            GetNewName = sTarget
            Exit Function
        End If
    Wend
End Function
'************************************************************************************************************
Sub Write2File(File)
    Dim fileStream
    Set fileStream = fso.CreateTextFile(File)
    fileStream.WriteLine firstNameInput
    fileStream.WriteLine lastNameInput
    fileStream.Close
End Sub
'************************************************************************************************************

第一个问题是你的线路造成的:

exists = fso.FolderExists(testPath)

应该是

exists = fso.FileExists(testPath)

因为您要查找的是文件,而不是文件夹。

第二个问题是你的线路造成的

count + 1

应该是

count = count + 1

将 new/increased 值分配给计数。