运行 文件将文本字符串重命名为 VBA 语句
Run file rename text string as a VBA statement
我想使用存储在 MS Access 子表单文本框中的 VBA 命令重命名文件。可能需要注意的是,VBA 命令是使用数据库查询中的串联公式生成的,并复制到文本框中。
这实际上是我尝试使用的代码,但我得到了 runtime error 2434 - The expression you entered contains invalid syntax
。可能有比使用 eval() 命令更好的方法。
Public Function BulkRenameFile()
Dim script As String
script = "Name ""c:\ipfimport\PE2258N275420.jpg"" As ""c:\ipfimport\PE2258N2754\PE2258N2754_PH1_20141216_2620.jpg"""
BulkRenameFile = Eval(script)
MsgBox ("Photo Renaming Complete")
End Function
如有任何帮助,我们将不胜感激。
我 post 这里有两个不同的例程,第一个用于重命名单个文件,第二个用于重命名文件夹中的所有文件(或将文件从一个文件夹移动到另一个文件夹)。第二个接受仅重命名某种文件的过滤器。它们都使用 FileSystemObject 组件(您必须包括 Microsoft Scripting Runtime)。
'--------------------------------------------------------
' Rename a file (returns the number of error, if any)
'--------------------------------------------------------
Public Function FileRename(strSourceFileName As String, strTargetFileName As String) As Integer
On Error GoTo Err_FileRename
Dim fso As FileSystemObject
Set fso = New FileSystemObject
fso.MoveFile strSourceFileName, strTargetFileName
Set fso = Nothing
Exit_FileRename:
FileRename = Err.Number
Exit Function
Err_FileRename:
GoTo Exit_FileRename
End Function
'--------------------------------------------------------
' Massively rename files
'--------------------------------------------------------
Public Sub MoveFiles(SourceFolderPath As String, DestinationFolderPath As String,
_ Optional FileFilter As String = "*.*")
Dim fso As FileSystemObject, fld As Folder, fil As File
Dim strDestinationFilePath As String
Set fso = New FileSystemObject
Set fld = fso.GetFolder(SourceFolderPath)
For Each fil In fld.Files
If fil.Name Like FileFilter Then
strDestinationFilePath = DestinationFolderPath + "\" + fil.Name
FileMove fil.Path, strDestinationFilePath
End If
Next fil
Set fld = Nothing
Set fso = Nothing
End Sub
最后我更改了查询中的字段表达式,它构建了一个从 VBA 代码到 DOS 代码的重命名命令。我将 DOS 重命名代码的完整数据表列粘贴到文本框中。文本框导出为 .txt 文件,然后 运行 作为 windows DOS 命令 shell.
中的 .bat
粘贴到文本框中的 DOS 重命名命令示例:
rename "c:\ipfimport\PE2152N2380\*7112.jpg" "PE2152N2380_LT_T25_20140516_7112.jpg"
rename "c:\ipfimport\PE2152N2380\*7113.jpg" "PE2152N2380_LT_T25_20140516_7113.jpg"
最终工作代码:
Function FileRename()
Dim fso As New FileSystemObject
Dim stream As TextStream
strPath = [Forms]![File Rename > Main].Text_FilePathBase.Value
strFile = "Rename.bat"
Set stream = fso.CreateTextFile(strPath & strFile, True)
Debug.Print strPath & strFile
strForm = [Forms]![File Rename > Main].Text_PasteRenameScript.Value
stream.Write strForm
stream.Close
Set fso = Nothing
Set stream = Nothing
Call Shell(strPath & strFile, vbNormalFocus)
MsgBox ("Renaming Complete")
End Function
我想使用存储在 MS Access 子表单文本框中的 VBA 命令重命名文件。可能需要注意的是,VBA 命令是使用数据库查询中的串联公式生成的,并复制到文本框中。
这实际上是我尝试使用的代码,但我得到了 runtime error 2434 - The expression you entered contains invalid syntax
。可能有比使用 eval() 命令更好的方法。
Public Function BulkRenameFile()
Dim script As String
script = "Name ""c:\ipfimport\PE2258N275420.jpg"" As ""c:\ipfimport\PE2258N2754\PE2258N2754_PH1_20141216_2620.jpg"""
BulkRenameFile = Eval(script)
MsgBox ("Photo Renaming Complete")
End Function
如有任何帮助,我们将不胜感激。
我 post 这里有两个不同的例程,第一个用于重命名单个文件,第二个用于重命名文件夹中的所有文件(或将文件从一个文件夹移动到另一个文件夹)。第二个接受仅重命名某种文件的过滤器。它们都使用 FileSystemObject 组件(您必须包括 Microsoft Scripting Runtime)。
'--------------------------------------------------------
' Rename a file (returns the number of error, if any)
'--------------------------------------------------------
Public Function FileRename(strSourceFileName As String, strTargetFileName As String) As Integer
On Error GoTo Err_FileRename
Dim fso As FileSystemObject
Set fso = New FileSystemObject
fso.MoveFile strSourceFileName, strTargetFileName
Set fso = Nothing
Exit_FileRename:
FileRename = Err.Number
Exit Function
Err_FileRename:
GoTo Exit_FileRename
End Function
'--------------------------------------------------------
' Massively rename files
'--------------------------------------------------------
Public Sub MoveFiles(SourceFolderPath As String, DestinationFolderPath As String,
_ Optional FileFilter As String = "*.*")
Dim fso As FileSystemObject, fld As Folder, fil As File
Dim strDestinationFilePath As String
Set fso = New FileSystemObject
Set fld = fso.GetFolder(SourceFolderPath)
For Each fil In fld.Files
If fil.Name Like FileFilter Then
strDestinationFilePath = DestinationFolderPath + "\" + fil.Name
FileMove fil.Path, strDestinationFilePath
End If
Next fil
Set fld = Nothing
Set fso = Nothing
End Sub
最后我更改了查询中的字段表达式,它构建了一个从 VBA 代码到 DOS 代码的重命名命令。我将 DOS 重命名代码的完整数据表列粘贴到文本框中。文本框导出为 .txt 文件,然后 运行 作为 windows DOS 命令 shell.
中的 .bat粘贴到文本框中的 DOS 重命名命令示例:
rename "c:\ipfimport\PE2152N2380\*7112.jpg" "PE2152N2380_LT_T25_20140516_7112.jpg"
rename "c:\ipfimport\PE2152N2380\*7113.jpg" "PE2152N2380_LT_T25_20140516_7113.jpg"
最终工作代码:
Function FileRename()
Dim fso As New FileSystemObject
Dim stream As TextStream
strPath = [Forms]![File Rename > Main].Text_FilePathBase.Value
strFile = "Rename.bat"
Set stream = fso.CreateTextFile(strPath & strFile, True)
Debug.Print strPath & strFile
strForm = [Forms]![File Rename > Main].Text_PasteRenameScript.Value
stream.Write strForm
stream.Close
Set fso = Nothing
Set stream = Nothing
Call Shell(strPath & strFile, vbNormalFocus)
MsgBox ("Renaming Complete")
End Function