Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
переименовываются только те, которые НЕ содержат на конце знак разделителя с номером (aka _X)
Вот это-то мне и не нужно . Нужно чтобы было определение на существование файла, и при совпадении, переименование должно происходить также, как это происходит с утилитой 7-zip.

Цитата:
у тебя все файлы изначально в одной папке и никаких конфликтов по сути нет
Вот именно что есть. Ведь я буду скриптом копировать с другого каталога, файлы с тем же расшрением что и в этом каталоге (в котором нужно произвести переименование), поэтому до самого копирования, мне нужно проверить на совпадение имён файлов, и если есть совпадение, то нужно переименовывать файлы как это делает 7-zip. Скорее всего, я не внятно объяснил цель всего этого, а пример с 7-zip привёл лишь для сравнения. В принципе, всё что нужно, так это сделать точно тот-же механизм переименовывания файлов как и у 7-zip.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:19, 01-10-2006 | #391



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Ведь я буду скриптом копировать с другого каталога
Что и требовалось доказать: "не внятно" не то слово - это уже совсем другая задача:

- у ф-ции будет ДВА рабочих параметра (источник и приемник), а не один;
- сравнивать нужно ПОФАЙЛОВО и расширение тут непричем (конфликтуют ИМЕНА, а не расширения сами по себе)

Допустим, мы хотим проверить существование заданного файла в каталоге и вернуть его новое для этой папки (см. текст ф-ции), алгоритм будет следующий: перед записью в каталог файла (не из этого каталога!) возвращаем через функцию его новое имя и сохраняем уже под этим именем... если что в 7zip именно так.
Код: Выделить весь код
MsgBox (0,"",_FileNewName ("myfile.dat", "c:\Test"))

Func _FileNewName ($sFile, $dDir, $delim = "_")
	$dDir = StringRegExpReplace ($dDir, "\\ *$", "")

	Local $sName= StringRegExpReplace ($sFile, "\.[^.]*$", "")
	Local $sExtn= StringMid ($sFile, StringLen ($sName) +1)
	Local $i=1, $dFile=$sFile
	While FileExists ($dDir & "\" & $dFile)
		$dFile = $sName & $delim & $i & $sExtn
		$i = $i +1
	WEnd
	Return $dFile
EndFunc

Последний раз редактировалось amel27, 04-10-2006 в 10:28. Причина: правка скрипта

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:29, 02-10-2006 | #392


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
сравнивать нужно ПОФАЙЛОВО и расширение тут непричем
Ну почему, мне нужно именно группу файлов одного расширения копировать, а проверять пофайлово я немогу, так как заранее не известно какие файлы будут копироваться. Известно лишь то, что в каталоге в который будут копироваться файлы, уже есть такие-же файлы (т.е с тем же расширением), и также 70% верятности того, что в этом каталоге будут совпадать имена файлов с теми что будут туда копироваться.

Функция что ты привёл в пример, отлично справляется с задачей, если бы нужно было переименовывать файлы которые копируются, в таком случае, можно указать и все файлы с определённым расширением. Но мне нужно проверять именно файлы в том каталоге, куда будут копироваться файлы с другого каталога...

Пример:

Имеем два каталога, первый - “c:\test\a” (с которого будут копироваться файлы), второй - “c:\test\b” (в который должный помещаться файлы, и в котором должно проверяться совпадение имён).

В каталоге “b”, перед копированием файлов с каталога “a”, нужно переименовать все файлы с расширением *.dat, но только те которые копируются. Т.е, если допустим, мы копируем два файла - filefirst.dat, filesecond.dat, то для них и нужно проверять совпадение в каталоге “c:\test\b”, если там такие файлы уже есть, то нужно переименовать их в те же имена + _1, но если уже есть и такие имена, то + _2 и т.д...
Чтобы в результате, не было потерь никаких файлов, чтобы те файлы которые копируются с “c:\test\a”, в том же виде поместились в “c:\test\b”, а существующие файлы в “c:\test\b”, чтобы всегда переименовались и сохранялись под разными последовательными именами (с приставкой на конце _1, _2 и т.д).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 18:39, 02-10-2006 | #393

Balog


Сообщения: n/a

Профиль | Цитировать


Извините, может этот вопрос уже поднимался но поиском ответа не нашел.
Опыта в AutoIt у меня очень мало, и я споткнулся еще на примерах к программе.
У меня русскоязычная винда и хотелось бы писать на русском и английском языках скажем в блокноте и иметь доступ к меню (скажем через ALT).
Проблема в следующем: англоязычные комбинации клавиш не проходят по определению, русскоязычные типа ALT+Ф проходят только если стоит русский язык по умолчанию, но тогда неправильно выводится англоязычный текст. Переключение текущего языка проблемы не решает, а переключения языка по умолчанию я не нашел.
Объясните пожалуйста как решить подобную проблему.

Отправлено: 12:05, 03-10-2006 | #394


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
а проверять пофайлово я немогу
интересно почему?.. та же функция _FileListToArray прекрасно восстановит список файлов по маске
Цитата:
чтобы те файлы которые копируются с “c:\test\a”, в том же виде поместились в “c:\test\b”, а существующие файлы в “c:\test\b”, чтобы всегда переименовались и сохранялись под разными последовательными именами
собственно нет никакой разницы чье имя менять - нового файла или существующего, сравни варианты (второй твой):
Код: Выделить весь код
$sDir = c:\Source\
$dDir = c:\Destin\

$sFiles = _FileListToArray ($sDir, "*.dat")

For $i=1 To $sFiles[0]
	$newName = _FileNewName ($sFiles[$i], $dDir)
	FileMove ($sDir & $sFiles[$i], $dDir & $newName)
Next
Код: Выделить весь код
$sDir = c:\Source\
$dDir = c:\Destin\

$sFiles = _FileListToArray ($sDir, "*.dat")

For $i=1 To $sFiles[0]
	$newName = _FileNewName ($sFiles[$i], $dDir)
	If $sFiles[$i] <> $newName Then FileMove ($dDir & $sFiles[$i], $dDir & $newName)
	FileMove ($sDir & $sFiles[$i], $dDir & $sFiles[$i])
Next
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:07, 03-10-2006 | #395


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Balog
Цитата:
как решить подобную проблему
См. FAQ (WinAPI-метод должен помочь).

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Отправлено: 03:08, 04-10-2006 | #396


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Нижний пример почти достигает желаемого результата. Пишу почти, так как есть один нюанс...

При первом запуске скрипта, всё проходит отлично - файлы в папке назначения переименовываются в новые имена (с добавкой _1), а файлы с папки источника, копируются на место тех которые переименовались. Однако, после вторичного запуска скрипта, я ожидал чтобы те файлы (в папке назначения), имена которых совпадают с именами копируемых файлов (с папки источника), переименовались уже не в те же что и в первый раз (с добавкой _1), а в имена с добавкой последующей цифры тем что уже существуют (с добавкой _2 в этом случае). А файлы которые копируются, чтобы стали под их оригинальными именами в папку назначения. Таким образом, всегда будут сохраняться копии всех файлов, из всех попыток копирования файлов - но, рабочие файлы (те которые не должный переименовываться, т.е те которые копируются из папки источника), должный быть всегда под своими оригинальными именами, а те файлы (в папке назначения) которые были под этими же именами, должный всегда быть переименованы с добавкой _1, _2 и т.д, но чтобы были всегда последними в последовательности добавленных к ним цифрам.

Я пытался самостоятельно переделать немного алгоритм, но никак не получается - Я понимаю что там требуется внести какое-то мелкое изменение, но оно должно быть правильное, и я пока этого сделать немогу, нехватает опыта что-ли...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 04:51, 04-10-2006 | #397


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
Нижний пример почти достигает желаемого результата
Я сказал почти?! жутко извеняюсь!!! - Всё что я описал выше, достигнуто тем примером который ты мне дал!!! СПАСИБО!

Мне всего лишь нужно было заместо перемещения, прописать копирование:

Код: Выделить весь код
$sDir = "c:\source\"
$dDir = "c:\dest\"

$sFiles = _FileListToArray ($sDir, "*.dat")

For $i=1 To $sFiles[0]
	$newName = _FileNewName ($sFiles[$i], $dDir)
	If $sFiles[$i] <> $newName Then FileMove ($dDir & $sFiles[$i], $dDir & $newName)
	FileCopy ($sDir & $sFiles[$i], $dDir & $sFiles[$i])
Next

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 05:12, 04-10-2006 | #398

Balog


Сообщения: n/a

Профиль | Цитировать


Sanja Alone
WinAPI метод переключает раскладки а не изменяет язык по умолчанию. Переключать язык как я понял сугубо недостаточно. Нужно что бы менялся язык по умолчанию. Если язык по умолчанию русский то команда Send("!Ф") предположим, срабатывает, но тогда неправильно отображается английский текст. Да и надеяться что у пользователя язык по умолчанию будет русский (у меня у самого английский) не приходится.
Так что нужен способ изменения языка по умолчанию. Я понимаю, что для автоматизации инсталляций работа с меню неактуальна, но неужели никто не задавался таким вопросом?

Последний раз редактировалось Balog, 04-10-2006 в 09:45.


Отправлено: 09:26, 04-10-2006 | #399


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Мне всего лишь нужно было заместо перемещения, прописать копирование
вспомнил, но поздно... хотя самому разобраться пользы больше

FYI: подредактировал ф-цию _FileNewName... старый вариант был короче, но для файлов без расширений всегда возвращал на конце точку - для операций с файлами это не важно, а вот для сравнений не есть гут

Отправлено: 10:25, 04-10-2006 | #400



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход