Переименовать некоторые файлы, находящиеся в папке, с другим именем файла, которое присутствует в другой папке в VBScript

#csv #vbscript #rename

#csv #vbscript #переименовать

Вопрос:

У меня есть папка 1, в которой присутствуют два CSV-файла с именами «Head.csv» и «Col.csv». Я хочу переименовать все те файлы CSV, которые присутствуют в папке 1. Суффикс, который я хотел добавить к каждому файлу CSV, — это другое имя файла, которое существует в папке2.

Имя файла 1 = фактический файл CSV, который я хочу переименовать Имя файла 2 = хотел добавить это имя файла в качестве суффикса. Этот файл присутствует в другой папке.

Вывод имени файла: Filename1 _ FileName2 .csv

Возьмем, к примеру, в папке 1 существуют «Head.csv» и «Col.csv», в то время как в папке 2 файл существует с именем general.txt . Имя файла в папке 2 может быть любым именем.

Пример: — Head_general.csv

 Option Explicit

Dim ofso, ofolder1,ofolder2,objFile, folderName1,folderName2 
Dim File,sNewFile,a

folderName1 = "C:UsersShantanuGuptaDesktopDRUMFolder1"  ' .csv file
folderName2 = "C:UsersShantanuGuptaDesktopDRUMFolder2" ' .txt file with different filename

Set ofso = CreateObject("Scripting.FileSystemObject")  
Set ofolder1 = ofso.GetFolder(folderName1)
Set ofolder2 = ofso.GetFolder(folderName2)
Set objFile  = oFolder2.Files 
filesuffix = ofso.GetBaseName(oFolder2.Files)

For Each File In oFolder1.Files
     sNewFile = File.Name       
     If instr(sNewfile, "Head.csv") > 0 THEN
        File.Name = Replace(File.Name, "Head.csv", "Head_" amp; filesuffix amp; ".csv")       
     End If
     If instr(sNewfile, "Col.csv") > 0 THEN
        File.Name = Replace(File.Name, "Col.csv", "Col_" amp; filesuffix amp; ".csv")
     End If
 Next
 

Ошибка, связанная с несоответствием типа ‘GetBaseName’.

Любая помощь???

Файлы, прикрепленные здесь

Комментарии:

1. oFolder2.Files возвращает коллекцию, вам нужно повторить коллекцию, чтобы получить каждый файл, даже если есть только один файл.

2. @flakes если я повторю, то как я могу добавить этот суффикс в файл.

3. Даже если вы повторяете, есть только один файл, поэтому он не будет перезаписан. For each objFile in oFolder2.Files : filesuffix = ofso.GetBaseName(objFile) : Next

4. Вам просто нужно заменить filesuffix = ofso.GetBaseName(oFolder2.Files) строку на приведенную выше.

Ответ №1:

Это может сработать, хотя я не совсем уверен, сколько файлов будет в ‘folder2’, но вы поняли идею:

 Option Explicit

Dim objFile, sNewFile, filesuffix

Dim folderName1 : folderName1 = "C:UsersShantanuGuptaDesktopDRUMFolder1"
Dim folderName2 : folderName2 = "C:UsersShantanuGuptaDesktopDRUMFolder2"

Dim ofso : Set ofso = CreateObject("Scripting.FileSystemObject")  
Dim ofolder1 : Set ofolder1 = ofso.GetFolder(folderName1)
Dim ofolder2 : Set ofolder2 = ofso.GetFolder(folderName2)

For Each objFile in ofolder2.Files
    filesuffix = ofso.GetBaseName(objFile)
Next

For Each objFile In oFolder1.Files
     sNewFile = ofso.GetBaseName(objFile.Name)   
     
     If StrComp(sNewfile,"Head",1) = 0 THEN
        objFile.Name = Replace(sNewFile, sNewFile, sNewFile amp; "_" amp; filesuffix amp; ".csv")        
     End If
     If StrComp(sNewfile,"Col",1) = 0 THEN
        objFile.Name = Replace(sNewFile, sNewFile, sNewFile amp; "_" amp; filesuffix amp; ".csv")
     End If
Next
 
Set ofolder1 = Nothing
Set ofolder2 = Nothing
Set ofso = Nothing