2015-04-06 3 views
2

Я хочу сделать программу, которая получает ввод пользователя и сохраняет его в текстовом документе, каждый раз, когда он сохраняет новый документ, я хочу имя файла изменитьизменить имя, если существует при создании текстового файла в 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

попробовать что-то вроде этого:

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 
'************************************************************************************************************ 
+0

Спасибо, что у меня это работает, просто интересно, можете ли вы помочь с этим -> http://stackoverflow.com/questions/29469545/vbs-how-to-edit-a-text-file-through-inputbox?noredirect = 1 # comment47102903_29469545 – RewForeN

0

Граф всегда начинается с 1, потому что вы так говорите. Count = 1. Храните количество в файле.

+0

Извините, но я очень новичок в программировании, можете ли вы показать пример хранения Count = 1 в файл, спасибо – RewForeN

+0

Скажите, какова ваша цель? Почему вы хотите создать 1 файл с 1 записью за прогон программы? – Serenity

1

Первая проблема вызвана вашей линии:

exists = fso.FolderExists(testPath) 

Это должно быть

exists = fso.FileExists(testPath) 

поскольку вы ищете файл, а не папку.

Вторая проблема вызвана вашей линии

count + 1 

Это должно быть

count = count + 1 

назначить новый/увеличенное значение сосчитать.

+0

Спасибо, я получил его работу, мне было интересно, можете ли вы помочь мне с этим -> http://stackoverflow.com/questions/29469545/vbs-how-to-edit-a-text-file -Через-InputBox? noredirect = 1 # comment47102903_29469545 – RewForeN

Смежные вопросы