2016-05-20 5 views
0

Я создаю файл сценария парня, который читает файлы в папке (Scripting.FileSystemObject), но я хотел бы связать индекс intpubox типа int, чтобы определить, какой файл в папке я буду писать на экран.Vbs - File Cont File Delete

Исход: indice = inputbox "" ← 4 захватите файл с индексом в папке 4 и не забудьте указать свое имя на экране. Интересно, возможно ли это, потому что уже пробовали по-разному и даже по матрице, но без результата.

Этот и мой код. Я не знаю, но куда идти!

Dim sFO, NovaPasta, Folder,File, Indice   
Dim inpast(4) 

'Setup 

Set sFO = CreateObject("Scripting.FileSystemObject") 
Set Folder = sFo.GetFolder("C:\Users\502526523\Documents\Control") 
NovaPasta = "Control" 

'Development 

If Not sFO.FolderExists (NovaPasta) = True Then 
    sFO.CreateFolder (NovaPasta) 
    Wscript.Sleep 900 
    WScript.Echo "Pasta Criada" 
Else 
    WScript.Echo "Pasta Existente " 
End If 

' Line Verificas a quantidade de inpastas dentro da pasta, se > 5 
' deleta os exedentes com data mais antiga 

For Each file In folder.Files 
    If Folder.Files.Count > 5 And (DateDiff("d", file.DateLastModified, Now) > 7) Then 
    WScript.Echo (file.Name & vbLf) 
    WScript.Echo ("Total files :" & Folder.Files.Count) 
    File.Delete 
    End If 
Next 

For Each file In folder.Files 
    inpast(0) = (file.Name) 
    inpast(1) = (file.Name) 
    inpast(2) = (file.Name) 
    inpast(3) = (file.Name) 
    inpast(4) = (file.Name) 

    Indice = Inputbox ("Digite o valor do Indice de 0...30") 

    Select Case Indice 
    Case 0 
     WScript.Echo inpast(0) 
    Case 1 
     WScript.Echo inpast(1) 
    Case 2 
     WScript.Echo inpast(2) 
    Case 3 
     WScript.Echo inpast(3) 
    Case 4 
     WScript.Echo inpast(4) 
    End Select 
Next 
+0

Ваш вопрос непонятен. –

+0

Google переводчик ------, мне нужно получить имя в папке, но интуитивно, если я набираю число в imputbox, это должно искать файл, соответствующий числу imputbox, то есть отношения. inputbox = 7 -------- msgbox = имя файла (7) внутри папки Я попытался использовать массив с футляром, но не работает. –

ответ

0

До сих пор не уверен, если я правильно понимаю ваш вопрос. Вы имеете в виду, что у вас есть список имен файлов, и вы хотите отобразить имя файла, соответствующее номеру, введенному пользователем через InputBox? Если это то, что вы хотите, вы должны изменить свой второй For Each цикл, как это:

i = 0 
For Each file In folder.Files 
    inpast(i) = file.Name 
    i = i + 1 
Next 

Indice = InputBox("Digite o valor do Indice de 0...30") 
WScript.Echo inpast(CInt(Indice)) 

Заметим, однако, что условие в первом For Each цикле не гарантирует вам только когда-либо 5 файлов, оставшихся после цикла. Если по какой-то причине папка содержит более 5 файлов, которые были изменены за последние 7 дней, второй цикл завершится с ошибкой «индекс вне диапазона».

Есть несколько способов, которыми Вы могли бы справиться с этим:

  • Dynamically resizeinpast массив, поэтому он может держать более чем на 5 пунктов.
  • Отсортировать файлы в папке по дате последней модификации (например, like this) и удалять все, кроме 5 последних файлов.
  • Отсечение второго For Each цикл после 5 th итерация (Exit For).

Обратите внимание, что вы должны дезинфицировать свой вход. (Что происходит, когда пользователи вводят текст, недопустимый номер или нажмите «Отмена»?)

+0

Доброе утро Дорогой! Извините за задержку в ответе .... Я ценю помощь, теперь первое, что нужно исправить, и перестать отвечать на вас, ребята, потому что, если нет, я бы не стал снова !!! Ansgar Wiechers - Его решение было именно тем, что мне было нужно, у меня было решение emcontrado pareceda для одного решения, но я не мог отформатировать вопрос о преобразовании Ciint, потому что я пытался преобразовать файл.count и не работал, но с его треском. Он отлично работал на вашей части пергуны, он работает, я тестировал папку с 54 старыми и новыми файлами, и она работала хорошо. Я благодарен за большую помощь ... –

0
Set fso = CreateObject("Scripting.FileSystemObject") 
Dirname = InputBox("Enter Dir name") 
'Searchterm = Inputbox("Enter search term") 
ProcessFolder DirName 

Sub ProcessFolder(FolderPath) 
' On Error Resume Next 
    Set fldr = fso.GetFolder(FolderPath) 
    msgbox fls.count 
    Msgbox fls.item("computerlist.txt") 
End Sub 

Чтобы сделать седьмую

Set Fls = fldr.files 

    For Each thing in Fls 
     Count = Count + 1 
     If count = 7 then msgbox Thing.Name & " " & Thing.DateLastModified 
    Next 
+0

Доброе утро Дорогой! Извините за задержку в ответе .... Я ценю помощь, теперь первое, что нужно исправить, и перестать отвечать на вас, ребята, потому что, если нет, я бы не стал снова !!! Лапша - ваше решение Я не могу полностью проверить, что она задает проблему в строке 9 требуемого объекта «фолио» трески: 800ª01A8 также проверит больше и отправит один быстрый ответ. –

+0

Введите полное имя каталога, например 'c: \ windows' или измените' Sub ProcessFolder (FolderPath) 'на' Sub ProcessFolder («c: \ windows») ' –

+0

Ввод имени каталога C: \ Users \ Simatic \ Desktop \ Control терпит неудачу строки 9 Требуется объект: 'FLS' Код: 800A01A8 Замена Sub ProcessFolder ("C: \ Users \ Simatic \ Desktop \ Control") Отображение строки Error 6 ожидается идентификатор Cod: 800A03F2 –