2015-11-06 2 views
1

Я работаю над сценарием, что мне нужно сделать следующее: В рабочей папке у меня есть структура папок, как это:Нужна помощь перемещение и переименование файлов с помощью VBS

  • Б

Есть файлы в корневой папке, которые должны быть перемещены в эти папки на основе имени файла. Пример имени файла будет «A, 1 ~ 1001-Text». Сценарий, который у меня есть (ниже), теперь переместит этот файл в папку «A» и переименует файл «1 ~ 1001-Text», используя запятую в качестве разделителя.

Dim fso 
Dim CurrentFolder 
Dim Files 
Dim NewFolderName 
Dim TruncatedFileName 
Dim NewFileName 
Dim aString 
Dim Array 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set CurrentFolder = fso.GetFolder(".") 
Set Files = CurrentFolder.Files 

For Each File in Files 
    If UCase(Right(File.Name,3)) <> "VBS" Then 
    TruncatedFileName = Left(File.Name, InstrRev(File.Name, ", ") - 1) 
    aString = File.Name 
    Array = Split(aString,", ") 
    NewFileName = Trim(Array(1)) 
    File.Move TruncatedFileName & "\" 
    fso.MoveFile TruncatedFileName & "\" & File.Name, TruncatedFileName & "\" & NewFileName 
    End If 
Next 

Что мне нужно для кода, чтобы затем взять файл «1 ~ 1001-Text» в папке «A», переместите его к подпапке «1» и переименуйте файл «1001- Текст ", используя в качестве разделителя символ" ~ ". Я попытался создать 2 каждой переменной и просто дублировать код в инструкции For Next, но это не работает ... любые предложения? Заранее спасибо.

+0

поправьте меня, если я ошибаюсь: Вы хотите, например, если у вас есть X Y ~ текстовые файлы, вы должны создать папку с именем X и переместить ее в этот файл позже, переименовав его в Y-Text? – Hackoo

+0

Файловая структура уже на месте, все папки уже существуют. Файл «A, 1 ~ 1001-Text» в конечном итоге должен заканчиваться на A> 1> «1001-Text» – snailtown

ответ

0

Я думаю, что нужно что-то вроде этого .... (не проверено)

Dim fso 
Dim CurrentFolder 
Dim Files 
Dim Array1 
Dim Array2 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set CurrentFolder = fso.GetFolder(".") 
Set Files = CurrentFolder.Files 

For Each File in Files 


If UCase(Right(File.Name,3)) <> "VBS" Then 'only do non .vbs files 

    Array1 = Split(File.Name, ", ") ' split the filename based on the , 

    If (Len(Array1(0)) = 1) Then ' if the first part was a value single character (folder name) 

     Array2 = Split(Array1(1), "~ ") ' now split the second part of the filename 

     If (Len(Array2(0)) = 1) And (IsNumeric(Array2(0))) Then ' if it had a valid single number value numeric folder name 

      fso.MoveFile(File, Trim(Array1(0)) & "\" & Trim(Array2(0)) & "\" & Trim(Array2(1))) ' do the move 

     Else 

      MsgBox("Could not parse '~ ' from file '" & File.Name & "'") 

     End If 

    Else 

     MsgBox("Could not parse ', ' from file '" & File.Name & "'") 

    End If 

End If 

Next 

Set CurrentFolder = Nothing 
Set Files = Nothing 
Set fso = Nothing 
+0

Это дает «Невозможно использовать круглые скобки при вызове Sub» при 24,97. Я очень новичок в VBScript, и я не уверен, как это исправить, но я буду разбираться с другими идеями. Кроме того, папка «A» является всего лишь примером, и папки будут сильно различаться по длине символов. – snailtown

+0

EDIT: Я удалил крайние скобки и два вложенных оператора If/Then, и он отлично работает. Спасибо! – snailtown

+0

Нет проблем - я все время забываю о скобках в vbs ... :-) рад, что это сработало. – KennetRunner

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