-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Переименовать файл
Помогите пожалуйста как реализовать такое переименовывание файла.
выбраный файл переименовывается и задаётся по следующему формату: текущая дата+не повторяемый за день цифра или буква (1-0, a-z), пример файлы 1209h, 0110k, 0110f, 01109.
|
Цитата:
Цитата cra5h_
не повторяемый за день цифра или буква »
|
Что значит «за день»? как скрипт должен определять что буква не повторялась, проверять все файлы в папке?
Код:
FileMove("file", @MON & StringRight(@YEAR, 2) & "a")
|
да скрипт примерно верен. по поводу символа за день - тоесть например 01 10 можно использовать только один раз символ из строки 0123465789аbcdefghijklmnopqrstuvwxyz. второй файл который будет переименовыватся 01 10 будет использовать один символ из строки 123465789аbcdefghijklmnopqrstuvwxyz (без 0) и т.д.
|
Цитата:
Цитата cra5h_
тоесть например 01 10 можно использовать только один раз символ из строки »
|
Всё равно не ясно, как следует определять, что символ уже использовался, или скрипт должен висеть в цикле и переименовывать файлы (по хоткею?), либо проверять существующие файлы?
|
нет скрипт должен срабатывать один раз при выборе файла.
следующий выбраный файл не должен иметь такое же название поэтому и поэтому в его названии должен быть другой символ.
У меня только одна идея как это сделать - после переименования файла оставшиеся не использованные символы записываются в ini файл и при запуске скрипта считываются
|
Цитата:
Цитата cra5h_
следующий выбраный файл не должен иметь такое же название »
|
А что если просто придавать этому файлу новое (не существующее) имя, в виде: 0110_1, 0110_2 и т.д.?
|
Нет такой вариант не подходит так как не будет с чем сравнить, переименованный файл отправляется по почте и тем самым удаляется из каталога.
|
Цитата:
Цитата cra5h_
не будет с чем сравнить, переименованный файл отправляется по почте и тем самым удаляется из каталога »
|
Тогда примерно так:
Код:
$sFile = FileOpenDialog("Select fie", "", "All files (*.*)")
If @error Then Exit
$sReg_Path = "HKCU\Software\" & @ScriptName
$sKey_Name = "Folder Sufix"
$sChars = "0123465789аbcdefghijklmnopqrstuvwxyz"
$sRead_Chars = RegRead($sReg_Path, $sKey_Name)
If $sRead_Chars = "" Then $sRead_Chars = $sChars
$sSufix_Char = StringLeft($sRead_Chars, 1)
RegWrite($sReg_Path, $sKey_Name, "REG_SZ", StringTrimLeft($sRead_Chars, 1))
$sPath = StringRegExpReplace($sFile, "\\[^\\]*$", "")
FileMove($sFile, $sPath & "\" & @MON & StringRight(@YEAR, 2) & $sSufix_Char)
|
спасибо и на этом.
в этом скрипте если заканчиваются символы из $sChars то они заново заполняются в не зависимости от того закончился день(или сменилась дата) или нет.
Как добавить сюда ограничение на количество переименованых файлов за день (в нашем случае 35) и разрешить переименовать файл только когда смениться дата.
|
Цитата:
Цитата cra5h_
в этом скрипте если заканчиваются символы из $sChars то они заново заполняются в не зависимости от того закончился день(или сменилась дата) или нет. »
|
Ну вообще то задача была поставлена очень смутно, опиши поэтапно что должен делать скрипт.
|
выбирается файл который переименовывается в зависимости от текущей даты. Имя файла формируется из следующих данных день, месяц, год + один произвольный неповтояющийся символ (из строки 0123465789аbcdefghijklmnopqrstuvwxyz) чтобы названия файлов были разные. За определённую дату можно переименовать только ограниченное число файлов (это ограничивается количеством символов из строки 0123465789аbcdefghijklmnopqrstuvwxyz), тоесть после смене даты можно снова переименовывать файлы.
После переименования через некоторое время файл будет удалён.
|
Код:
$sReg_Path = "HKCU\Software\" & @ScriptName
$sKey_Name = "Folder Sufix"
$sDate_Sufix = @MDAY & @MON & @YEAR
$sChars = "0123465789аbcdefghijklmnopqrstuvwxyz_" & $sDate_Sufix
$sRead_Chars = RegRead($sReg_Path, $sKey_Name)
$iError = @error
If $sRead_Chars == "_" & $sDate_Sufix Then Exit
If $iError <> 0 Or Not StringRegExp($sRead_Chars, "[0-9a-z]+_\Q" & $sDate_Sufix & "\E$") Then $sRead_Chars = $sChars
$sSufix_Char = StringLeft($sRead_Chars, 1)
$sFile = FileOpenDialog("Select fie", "", "All files (*.*)")
If @error Then Exit
$sNew_File = StringRegExpReplace($sFile, "\\[^\\]*$", "") & "\" & $sDate_Sufix & $sSufix_Char
FileMove($sFile, $sNew_File)
RegWrite($sReg_Path, $sKey_Name, "REG_SZ", StringTrimLeft($sRead_Chars, 1))
|
самое оно. Убрал только привязку к реестру, сделал на ini файле. Спасибо
|
Время: 13:29.
© OSzone.net 2001-