Что нового

[Файловая система] Резервирование данных и смена расширения файла

DR_ALF

Новичок
Сообщения
16
Репутация
0
Версия AutoIt: 3.3.6.1

На диске "С" содержится директория Data в ней вложены еще папки вот с такой структурой:
C:\Data\2015\Июнь\1\file.txt ...т.е. каждому месяцу и каждому дню присвоена своя папка в которой находится файл с данными. По мере работы программы информация в базу данных добавляется.
При запуске скрипта нужно делать копирование папки Data с диска "С" на диск "D" с сохранением структуры каталогов, но при этом сменить расширение файлов с txt на csv.
При следующем запуске скрипт не должен перезаписывать уже имеющиеся на диске "D" файлы и папки.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <File.au3>
Local $name, $pathdest = 'D:\Data'
Local $path = 'C:\Data', $pathrep
Local $aFiles = _FileListToArrayRec($path, '*', 1, 1, 0, 2)
For $i = 1 To $aFiles[0]
	$pathrep = StringReplace($aFiles[$i], $path, $pathdest, 1)
	$name = StringRegExpReplace($pathrep, '\.[^.]*$', '')
	FileCopy($aFiles[$i], $name & '.csv', 8)
Next
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
joiner, Нет, ну ты прикинь, у меня сегодня получился точно такой же код, прям идентичный, отличие только в том, что я использовал константы к функции _FileListToArrayRec и функцию написал для замены расширения, вот, пожалуй выложу её, вдруг кому пригодится:
Код:
_replaceFileExt("C:\data\file.txt", ".csv") ; результат: C:\data\file.csv

Func _replaceFileExt($sFilename, $sNewExt)
	Local $aSplit
	$sNewExt = StringRegExpReplace($sNewExt, '[^a-zA-Z0-9]+', '')
	If $sFilename = "" Or $sNewExt = "" Then Return SetError(1, 0, 0)
	If Not StringInStr($sFilename, '.') Then Return SetError(2, 0, 0)
	$aSplit = StringSplit($sFilename, '.', 1)
	If Not IsArray($aSplit) Or @error Then Return SetError(@error, @extended, 0)
	Return StringReplace($sFilename, $aSplit[$aSplit[0]], $sNewExt, 1)
EndFunc   ;==>_replaceFileExt
 
Автор
D

DR_ALF

Новичок
Сообщения
16
Репутация
0
joiner сказал(а):
Код:
#include <File.au3>
Local $name, $pathdest = 'D:\Data'
Local $path = 'C:\Data', $pathrep
Local $aFiles = _FileListToArrayRec($path, '*', 1, 1, 0, 2)
For $i = 1 To $aFiles[0]
	$pathrep = StringReplace($aFiles[$i], $path, $pathdest, 1)
	$name = StringRegExpReplace($pathrep, '\.[^.]*$', '')
	FileCopy($aFiles[$i], $name & '.csv', 8)
Next
Выдает ошибку, правда на моем рабочем компьютере вместо D-диска, буква E назначена. Я это в скрипте подправил и все равно ошибка. Может мне Autoit обновить нужно или библиотеки какие добавить?
 

Вложения

  • Скриншот (10.07.2015 11-18-57).jpg
    Скриншот (10.07.2015 11-18-57).jpg
    34.3 КБ · Просмотры: 10

alex33

Скриптер
Сообщения
1,457
Репутация
186
DR_ALF сказал(а):
Может мне Autoit обновить нужно или библиотеки какие добавить?
На сколько я помню: в старых версиях AutoIt отсутствует функция _FileListToArrayRec, а также некоторые константы. Да, обновитесь до 3.3.12.0.
 
Автор
D

DR_ALF

Новичок
Сообщения
16
Репутация
0
Всем большое спасибо за помощь, все работает как нужно!
 
Верх