我需要根据文件内容移动一系列文件。理想情况下,这可以从 Excel 内部触发,因为用户正在导入文件。我可以使用一个简单的 Unix shell 脚本来执行此操作,如下所示:
#!/bin/bash
for F in $(ls *.csv)
do
while read N W
do
if grep -q "$W" "$F"
then
NEW=${N:0:50}.csv
echo $F $NEW
cp "$F" WORKING/$NEW
break
fi
done < ../Documents/ASSET\ Sale/bin/fixfilenames_namemap.txt
done
cp Name*.csv WORKING/name_name2.csv
fixfilesnames_namemap.txt 的格式为:
newfilename text search string
newfilename2 text search string number two
请注意,最后一行是一个临时解决方案,因为该文件的名称中有很多空格,因此无法在循环中正确调用,所以我只移动一个文件。
我想要一个可以运行的 VBA 例程或者一个可以从 Excel 2016 内部触发的简单 .bat 文件。
目前,我正在使用 RenameFile() 函数,该函数允许我指定目录、源和新名称。如果我能让搜索函数在另一个字段中查找文本字符串,那么一切就都准备好了。
Public Function RenameFile()
Dim src As String, dst As String, fl As String
Dim rfl As String
'Folder
src = Range("F4")
'File name
fl = Range("G4")
'Rename file
rfl = Range("Assets_Eligible_Destination")
On Error Resume Next
Name src & "\" & fl As src & "\" & rfl
If Err.Number <> 0 Then
MsgBox "Error: " & src & "\" & rfl
End If
On Error GoTo 0
End Function
谢谢
答案1
以下代码可用于在一组文件中的某个工作表中查找字符串。但是,如果文件有 100K 行,并且匹配行在最后 10 行,则速度会非常慢。
这是基于另一个 StackOverflow 答案: 如何使用 VBA 在众多文本 .log 文件之一中查找特定字符串?
Sub StringExistsInFile()
Dim theString As String
Dim path As String
Dim StrFile As String
Dim fso As New FileSystemObject
Dim file As TextStream
Dim line As String
theString = Range("E4")
path = Range("F4")
StrFile = Dir(path & "*.csv")
Do While StrFile <> ""
'Find TheString in the file
'If found, debug.print and exit loop
'Set file = fso.OpenTextFile(path & StrFile)
Do While Not file.AtEndOfStream
line = file.ReadLine
'Debug.Print line
If InStr(1, line, theString, vbTextCompare) > 0 Then
Range("G4").Value = StrFile
Exit Do
End If
Loop
file.Close
Set file = Nothing
Set fso = Nothing
StrFile = Dir()
Loop
End Sub