Мне нужно переместить ряд файлов в зависимости от их содержания. В идеале это может быть вызвано изнутри Excel, так как пользователь импортирует файлы. Я могу сделать это с помощью простого сценария оболочки Unix следующим образом:
#!/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
Обратите внимание, что последняя строка представляет собой kludge, так как этот файл имеет несколько пробелов в имени, и поэтому он не может быть правильно вызван в цикле, поэтому я просто перемещаю один файл.
Мне бы хотелось, чтобы выполнялась подпрограмма VBA или, возможно, простой файл .bat, который я мог бы запускать из Excel 2016.
В настоящее время я работаю с функцией 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
Спасибо