#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