PDA

Показать полную графическую версию : [решено] Переименовать файл


cra5h_
05-01-2010, 14:00
Помогите пожалуйста как реализовать такое переименовывание файла.
выбраный файл переименовывается и задаётся по следующему формату: текущая дата+не повторяемый за день цифра или буква (1-0, a-z), пример файлы 1209h, 0110k, 0110f, 01109.

Creat0R
05-01-2010, 14:38
не повторяемый за день цифра или буква »
Что значит «за день»? как скрипт должен определять что буква не повторялась, проверять все файлы в папке?

FileMove("file", @MON & StringRight(@YEAR, 2) & "a")

cra5h_
05-01-2010, 15:14
да скрипт примерно верен. по поводу символа за день - тоесть например 01 10 можно использовать только один раз символ из строки 0123465789аbcdefghijklmnopqrstuvwxyz. второй файл который будет переименовыватся 01 10 будет использовать один символ из строки 123465789аbcdefghijklmnopqrstuvwxyz (без 0) и т.д.

Creat0R
05-01-2010, 15:23
тоесть например 01 10 можно использовать только один раз символ из строки »
Всё равно не ясно, как следует определять, что символ уже использовался, или скрипт должен висеть в цикле и переименовывать файлы (по хоткею?), либо проверять существующие файлы?

cra5h_
05-01-2010, 15:50
нет скрипт должен срабатывать один раз при выборе файла.
следующий выбраный файл не должен иметь такое же название поэтому и поэтому в его названии должен быть другой символ.
У меня только одна идея как это сделать - после переименования файла оставшиеся не использованные символы записываются в ini файл и при запуске скрипта считываются

Creat0R
05-01-2010, 16:13
следующий выбраный файл не должен иметь такое же название »
А что если просто придавать этому файлу новое (не существующее) имя, в виде: 0110_1, 0110_2 и т.д.?

cra5h_
05-01-2010, 16:22
Нет такой вариант не подходит так как не будет с чем сравнить, переименованный файл отправляется по почте и тем самым удаляется из каталога.

Creat0R
05-01-2010, 16:55
не будет с чем сравнить, переименованный файл отправляется по почте и тем самым удаляется из каталога »
Тогда примерно так:

$sFile = FileOpenDialog (http://www.autoitscript.com/autoit3/docs/functions/FileOpenDialog.htm)("Select fie", "", "All files (*.*)")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)

$sReg_Path = "HKCU\Software\" & @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName)
$sKey_Name = "Folder Sufix"
$sChars = "0123465789аbcdefghijklmnopqrstuvwxyz"
$sRead_Chars = RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sReg_Path, $sKey_Name)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sRead_Chars = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sRead_Chars = $sChars
$sSufix_Char = StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($sRead_Chars, 1)

RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)($sReg_Path, $sKey_Name, "REG_SZ", StringTrimLeft (http://www.autoitscript.com/autoit3/docs/functions/StringTrimLeft.htm)($sRead_Chars, 1))

$sPath = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFile, "\\[^\\]*$", "")
FileMove (http://www.autoitscript.com/autoit3/docs/functions/FileMove.htm)($sFile, $sPath & "\" & @MON (http://www.autoitscript.com/autoit3/docs/macros.htm#@MON) & StringRight (http://www.autoitscript.com/autoit3/docs/functions/StringRight.htm)(@YEAR (http://www.autoitscript.com/autoit3/docs/macros.htm#@YEAR), 2) & $sSufix_Char)

cra5h_
05-01-2010, 17:17
спасибо и на этом.
в этом скрипте если заканчиваются символы из $sChars то они заново заполняются в не зависимости от того закончился день(или сменилась дата) или нет.
Как добавить сюда ограничение на количество переименованых файлов за день (в нашем случае 35) и разрешить переименовать файл только когда смениться дата.

Creat0R
05-01-2010, 17:29
в этом скрипте если заканчиваются символы из $sChars то они заново заполняются в не зависимости от того закончился день(или сменилась дата) или нет. »
Ну вообще то задача была поставлена очень смутно, опиши поэтапно что должен делать скрипт.

cra5h_
05-01-2010, 17:47
выбирается файл который переименовывается в зависимости от текущей даты. Имя файла формируется из следующих данных день, месяц, год + один произвольный неповтояющийся символ (из строки 0123465789аbcdefghijklmnopqrstuvwxyz) чтобы названия файлов были разные. За определённую дату можно переименовать только ограниченное число файлов (это ограничивается количеством символов из строки 0123465789аbcdefghijklmnopqrstuvwxyz), тоесть после смене даты можно снова переименовывать файлы.
После переименования через некоторое время файл будет удалён.

Creat0R
05-01-2010, 23:02
$sReg_Path = "HKCU\Software\" & @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName)
$sKey_Name = "Folder Sufix"
$sDate_Sufix = @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) & @MON (http://www.autoitscript.com/autoit3/docs/macros.htm#@MON) & @YEAR (http://www.autoitscript.com/autoit3/docs/macros.htm#@YEAR)
$sChars = "0123465789аbcdefghijklmnopqrstuvwxyz_" & $sDate_Sufix

$sRead_Chars = RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sReg_Path, $sKey_Name)
$iError = @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sRead_Chars == "_" & $sDate_Sufix Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iError <> 0 Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sRead_Chars, "[0-9a-z]+_\Q" & $sDate_Sufix & "\E$") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sRead_Chars = $sChars

$sSufix_Char = StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($sRead_Chars, 1)

$sFile = FileOpenDialog (http://www.autoitscript.com/autoit3/docs/functions/FileOpenDialog.htm)("Select fie", "", "All files (*.*)")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)

$sNew_File = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFile, "\\[^\\]*$", "") & "\" & $sDate_Sufix & $sSufix_Char

FileMove (http://www.autoitscript.com/autoit3/docs/functions/FileMove.htm)($sFile, $sNew_File)
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)($sReg_Path, $sKey_Name, "REG_SZ", StringTrimLeft (http://www.autoitscript.com/autoit3/docs/functions/StringTrimLeft.htm)($sRead_Chars, 1))

cra5h_
11-01-2010, 16:58
самое оно. Убрал только привязку к реестру, сделал на ini файле. Спасибо




© OSzone.net 2001-2012