excel - 如果文件名重复,将文件移动到(错误)不同的目录
问题描述
我有一个代码,它根据第一行文本的内容重命名文本文件。
保存的文本文件的名称可以加倍。
我想将重复的文本文件保存在不同的目录“C:\Research syntheses - Meta analysis\Txt files ECS\out\double\”中。
Sub RenameTextFile()
Const SpecialCharacters As String = "\,/,:,*,?,<,>,|,""," ' Modify this as neccesary
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, FileName, TextLine
Dim char As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder("C:\Research syntheses - Meta analysis\Txt files ECS\out\")
For Each fil In fol.Files
FileName = fil
Set MyFile = fso.OpenTextFile(FileName, ForReading)
Do While MyFile.AtEndOfStream <> True
Do
Dim tmpLine As String
TextLine = MyFile.ReadLine
tmpLine = RemoveWhiteSpace(TextLine)
If Len(tmpLine) = 0 Then
TextLine = tmpLine
End If
Loop Until Len(TextLine) > 0
MyFile.Close
For Each char In Split(SpecialCharacters, ",")
TextLine = Replace(TextLine, char, "")
Next
fil.Name = TextLine & ".txt"
Exit Do
Loop
MyFile.Close
Next fil
End Sub
解决方案
Option Explicit
Sub RenameTextFile()
Const SpecialCharacters As String = "\,/,:,*,?,<,>,|,""," ' Modify this as neccesary
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const foldPath As String = "C:\Research syntheses - Meta analysis\Txt files ECS\out\"
Dim fso, MyFile, FileName, TextLine, fol As Object, fil As Object
Dim char As Variant, arrSavedFiles(), k As Long, El As Variant, boolFound As Boolean
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder(foldPath)
ReDim arrSavedFiles(k)
For Each fil In fol.Files
FileName = fil
Set MyFile = fso.OpenTextFile(FileName, ForReading)
Do While MyFile.AtEndOfStream <> True
Do
Dim tmpLine As String
TextLine = MyFile.ReadLine
tmpLine = Trim(TextLine)
If Len(tmpLine) <> 0 Then
TextLine = tmpLine: Exit Do
End If
Loop Until Len(TextLine) > 0
MyFile.Close
For Each char In Split(SpecialCharacters, ",")
TextLine = Replace(TextLine, char, "")
Next
For Each El In arrSavedFiles
If El = TextLine & ".txt" Then boolFound = True: Exit For
Next
If Not boolFound Then
fil.Name = TextLine & ".txt"
arrSavedFiles(k) = TextLine & ".txt"
k = k + 1: ReDim Preserve arrSavedFiles(k)
Else
boolFound = False
If Not fso.FolderExists(foldPath & "error\") Then MkDir foldPath & "error\"
FileCopy foldPath & fil.Name, foldPath & "error\" & fil.Name
Kill foldPath & fil.Name
End If
Exit Do
Loop
MyFile.Close
Next fil
End Sub
这将做你需要的(我理解)。但是,如果有两个以上的文件包含相同的第一行 text,则必须以类似的方式调整代码。我的意思是,在将文件复制到“错误”文件夹之前,您必须填写另一个数组并检查该文件是否存在。并做一些事情(创建另一个文件夹,使用消息发出警告等)......移动的文件名不会改变!如有必要,可以在同一段代码中,或再次为“错误”文件夹运行代码。
推荐阅读
- python - 在 conda 下安装 PyTorch 失败,出现权限错误和回滚事务
- android - 尝试将 Unity/Vuforia 项目上传到 S7(Oreo 8.0)
- php - php - error document combined with mod_rewrite
- android - Picasso.with() 没有在 android 中检索图像
- javascript - 为什么我收到错误“需要生成器功能”
- dynamics-crm - How to: Update related (through Regarding field) Lead on Task create/update in MS Dynamics
- tensorflow - tf.clip_by_norm(grad, 1.0) throws InvalidArgumentError Shapes must be equal rank, but are 2 and 1
- node.js - 即使我为这些字段提供值,Mongoose 验证也会失败
- node.js - 错误当我尝试在 ubuntu 中的 express 的其他依赖中安装 express-stormpath 时命令失败
- mongodb-query - 在每个对象数组中添加一个新元素,其中数组在 mongodb 中可能具有不同的长度