2013-10-02 5 views
0

У меня есть базовый код vbs для разбиения имени файла на первом знаке подчеркивания. Например: t_e_s_t становится t. Я не хочу разделить имя файла, я хочу удалить аннотацию имени файла , которая будет состоять из "." «_» и пробелы.Сценарий vbs для удаления аннотации

Пожалуйста, может кто-нибудь просто взглянуть на код и рассказать мне, как его изменить?

Option Explicit 

Dim strPath 
Dim FSO 
Dim FLD 
Dim fil 
Dim strOldName 
Dim strNewName 
Dim strFileParts 

    'Define the path to the file 
    strPath = inputbox("File path:") 

    'Create the instance of the FSO 
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    'Set the folder you want to search. NOTE - some antivirus may not like this 
    Set FLD = FSO.GetFolder(strPath) 

    'Loop through each file in the folder 
    For Each fil in FLD.Files 
     'Get complete file name with path 
     strOldName = fil.Path 

     'Check the file has an underscore in the name 
     If InStr(strOldName, "_") > 0 Then 

'Split the file on the underscore so we can get everything before it 
strFileParts = Split(strOldName, "_") 

'Build the new file name with everything before the 

'first under score plus the extension 
strNewName = strFileParts(0) & ".txt" 

'Use the MoveFile method to rename the file 
FSO.MoveFile strOldName, strNewName 

    End If 
    Next 

    'Cleanup the objects 
    Set FLD = Nothing 
Set FSO = Nothing 

ответ

0

Как насчет:

strNewName = Replace(strOldName, "_", "") & ".txt" 
+0

Спасибо очень! Я ценю это, и с некоторой корректировкой это будет делать именно то, что я хочу! – user2709851

0

Вместо издательского кода, который не делает то, что вы хотите, вы должны точно указать, что вход должен быть преобразован в какой выход. Например: «t e.s_t» должен стать «тестом». Тогда можно было бы легко придумать какое-нибудь доказательство концепции кода:

>> Function qq(s) : qq = """" & s & """" : End Function 
>> Function clean(s) 
>> clean = Replace(Replace(Replace(s, " ", ""), ".", ""), "_", "") 
>> End Function 
>> a = Array("test", "t e s t", "t_e.s t") 
>> For i = 1 To UBound(a) 
>>  c = clean(a(i)) 
>>  WScript.Echo qq(a(i)), qq(c), CStr(c = a(0)) 
>> Next 
>> 
"t e s t" "test" True 
"t_e.s t" "test" True 
>> 

и действительно интересные вопросы, как:

  1. Почему применить модификацию полный путь (strOldName = fil.Path)?
  2. Что должно произойти с точкой перед расширением?
+0

Извините, человек! я сказал, что это мой первый раз! и я не сейчас все о коде, который я попросил о помощи !! это много? – user2709851

0

Используйте регулярное выражение:

Set re = New RegExp 
re.Pattern = "[._ ]" 
re.Global = True 

For Each fil in FLD.Files 
    basename = FLD.GetBaseName(fil) 
    extension = FLD.GetExtensionName(fil) 
    fil.Name = re.Replace(basename, "") & "." & extension 
Next 

Если вы хотите, чтобы калечить расширение и добавить новое расширение .txt для каждого файла, независимо от использования типа этого цикла вместо:

For Each fil in FLD.Files 
    fil.Name = re.Replace(fil.Name, "") & ".txt" 
Next 
Смежные вопросы