1 (изменено: alexii, 2011-06-23 22:45:31)

Тема: AHK: Копирование имён файлов папки в блокнот

Подскажите, пожалуйста, команду (или серию команд, параметров, переменных, выражений) для поочерёдного копирования имён файлов определённой папки в текстовой документ.

2

Re: AHK: Копирование имён файлов папки в блокнот

OFF: Если вам нужно добиться данного результат не средствами AHK, а скажем файловым менеджером Total Commander. Выделяем в нем файлы, жмем Вверху "Запуск" - Список только с именами.

3

Re: AHK: Копирование имён файлов папки в блокнот

Приведу в пример скрипт, которым пользуюсь на работе.
Разбирайтесь.

;~ Создает множество папок в соответствии с кол-вом ворд файлов
;~ и раскидывает по ним исходные файлы (копирует их по папкам)


SetWorkingDir, %A_ScriptDir%
loop, *.doc ; перебирает все вордовские документы в папке
{
	name := substr(A_LoopFileName, 1, strlen(A_LoopFileName)-4) ; вытаскивает имя файла
	FileCreateDir, %name% ; создает папку с таким именем
	FileCopy, %name%.doc , %name%/%name%.doc, 1 ; и копирует исходный файл в эту папку
}

4

Re: AHK: Копирование имён файлов папки в блокнот

Ark пишет:

OFF: Если вам нужно добиться данного результат не средствами AHK, а скажем файловым менеджером Total Commander. Выделяем в нем файлы, жмем Вверху "Запуск" - Список только с именами.

Спасибо за подсказку. При случае скачаю этот менеджер и поэкспериментирую. Однако в данный момент хотелось бы поработать именно с AutoHotkey.

5 (изменено: Эдвард, 2011-06-24 18:12:45)

Re: AHK: Копирование имён файлов папки в блокнот

InFlames пишет:

Приведу в пример скрипт, которым пользуюсь на работе.
Разбирайтесь.

Благодарю за интересный пример. На основе его создал свой простенький скрипт:

#v::
FileList =
SetWorkingDir, E:\Мастерская\Сайт\39
Loop, *.jpg
{
name := substr(A_LoopFileName, 1, strlen(A_LoopFileName)-4)
FileAppend, %name%, E:\Мастерская\Сайт\39\5.txt
}

Правда, обнаружился один минус: имена файлов записываются в блокнот друг за другом без пробелов. А в идеале хотелось бы, чтобы каждое имя заносилось в отдельную строку (ещё лучше, если через строку). Может, подскажете, что нужно изменить с этом скрипте для осуществление задуманного?

6

Re: AHK: Копирование имён файлов папки в блокнот

после переменной %name% поставить перенос строки `n (или 2, если надо)

%name%`n`n

7 (изменено: Эдвард, 2011-06-24 21:15:50)

Re: AHK: Копирование имён файлов папки в блокнот

InFlames пишет:

после переменной %name% поставить перенос строки `n (или 2, если надо)

Точно! Как же я сам не догадался?!

Итог:

#b::
FileList =
SetWorkingDir, E:\Мастерская\Сайт\40
Loop, *.jpg
{
Size := (A_LoopFileSizeKB)
; Size := substr(A_LoopFileSizeKB, 1, strlen(A_LoopFileSizeKB)-4)
FileAppend, %Size% КБ `n, E:\Мастерская\Сайт\39\5.txt
}

8

Re: AHK: Копирование имён файлов папки в блокнот

Тогда уж так.


#b::
  SetWorkingDir, E:\Мастерская\Сайт\40
  Loop, *.jpg
    FileAppend, %A_LoopFileSizeKB% КБ`n, E:\Мастерская\Сайт\39\5.txt
return ; в конце хоткея, если он написан на нескольких строках, необходимо ставить эту команду
; в данном случае это не обязательно, но лучше ставить ее всегда

9

Re: AHK: Копирование имён файлов папки в блокнот

А можно ли модифицировать этот скрипт так, чтобы:
а) брались имена только выделенных файлов;
б) имена файлов копировались в буфер;
в) имена копировались в порядке их выделения (опционально)?

10 (изменено: Indomito, 2013-11-06 16:22:24)

Re: AHK: Копирование имён файлов папки в блокнот

Эдвард пишет:

При случае скачаю этот менеджер и поэкспериментирую...

Это операция Total Commander, т.е. построение списков файлов, далеко не единственная, честно говоря, лучше использовать TC, чем AHK, т.е. с построением списка файлов он справится лучше, а тебе не придётся писать скрипт.

Total Commander можно использовать вместо оболочки  Explorer, он будет, выполнить все его функции. Я раньше так и делал, правда, в Windows 7 я не пробовал, было лень или просто было не до того.

У всех пользователей, которые используют Windows выходя за пределы Microsoft Office - он установлен, хотя я встречал программистов которые не устанавливали Total Commander, а на вопрос  "Почему?",  они отвечали "Из принципа, он мне не нравится".

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

11

Re: AHK: Копирование имён файлов папки в блокнот

"У всех пользователей", ага
Я один из всех пользователей, но у меня он не стоит.
И первые 4 программиста, которые мне приходят на ум, теперь не могу ТК; двое из них пользуются Фаром, одна не заморачивается и использует проводник и командную строку по необходимости, а четвёртый сидит под Win2K на дефолтных настройках и любит то ли Волков, то ли Нортон.
Однако, я бампнул тему двухлетней давности не для пустого разговора об оболочках и о том, как НЕ пользоваться АХК, а для того чтобы понять, как можно модифицировать скрипт, о котором идёт речь, под мои нужды.

12 (изменено: Indomito, 2013-11-06 17:12:25)

Re: AHK: Копирование имён файлов папки в блокнот

Ну, если уж написал, плюс я жду ответа про ГПСЧ, то отвечу TC, FAR, WC и NC - это одно и тоже. У меня стоит и FAR и ТС, первый для замены ком. строки и по привычке, а второй как замена функционалу Explorer-а, которым я не пользуюсь, т.е. он есть,  он есть потому, что есть и не более.

P.S. ГСПЧ - AHK: Опрератор/функция Random - несколько вопросов по использованию.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

13

Re: AHK: Копирование имён файлов папки в блокнот

ТК и Фар весьма отличаются. Вы ещё Directory Opus замешайте в котелок, он же тоже крайне на ТК похож
А по теме точно ничего у вас нету?

14

Re: AHK: Копирование имён файлов папки в блокнот

chegr пишет:

А по теме точно ничего у вас нету?

Готового у меня нет, а так надо внимательно прочитать и понять что не получается, я просто наткнулся на фразу про ТС и ответил - сейчас перечитаю тему и отвечу.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

15 (изменено: chegr, 2013-11-06 17:23:28)

Re: AHK: Копирование имён файлов папки в блокнот

Я ещё более полно задачу объясню.
Периодически мне нужно сбрасывать аьской-скайпом списки некоторых файлов и путь к ним.
Скрипт, который превращает локальный путь в сетевой написался проще простого.
А вот как сделать так, чтобы имена скопированных в буфер, например, файлов превращались в текст — мне после возни с DllCall и курением мануала сделать не удалось.
Много знакомых программистов и мало собственных умений
Сейчас пользуюсь плагином ClipboardManager для TrueLaunchBar (на который, кстати, меня ещё один программист подсадил, который любит Фар). Там есть возможность конвертить содержимое буфера в текст, но в данном случае все файлы будут с путями перед именем, да и долго это, много кликов, а у меня руки почти всё время на клавиатуре (потому АХК и люблю).

16

Re: AHK: Копирование имён файлов папки в блокнот

chegr пишет:

А можно ли модифицировать этот скрипт так, чтобы:
а) брались имена только выделенных файлов;
б) имена файлов копировались в буфер;
в) имена копировались в порядке их выделения (опционально)?

По теме.

  1. Я не знаю функцию которая определяет/отвечает за выделение файлов

  2. В буфер обмена - это стандартная функция

  3. С порядком выделения, как и с первым, просто разве Explorer выделяет файлы? Я просто не в курсе его файловых операций

А как в Explorer-е выделить файлы? То есть на что надо нажать то?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

17

Re: AHK: Копирование имён файлов папки в блокнот

Моя задумка в том, чтобы что-то сделать с содержимым буфера.
Насколько я понимаю, там после копирования файлов лежит именно путь к ним и есть что-то вроде типа данных, который говорит системе "это файлы, а не текст". Я убеждён в этом на том основании, что мой скрипт автозамены локальных путей на сетевые подменял значения не только в адресе, скопированном из Проводника, но и в пути к скопированному файлу, если там нужное значение попадалось. То есть АХК может видеть путь к скопированному файлу и имя его, соответственно, как текст.

Вот нужный фрагмент кода, о котором я говорю:


OnClipboardChange:
if DllCall("IsClipboardFormatAvailable", "Int", 16) ; CF_LOCALE
{
StringReplace, Clipboard, Clipboard, D:\_works\, \\MACHINE\_works\, All
}
return

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

18

Re: AHK: Копирование имён файлов папки в блокнот

Так, я не понял - а что не получается то? Определить выделенные файлы? Или что иное?
Опереации с Clipboard просты в AHK "до безобразия"...

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

19

Re: AHK: Копирование имён файлов папки в блокнот

Превратить выделенные и скопированные файлы в список их имён в текстовом виде при нажатии чего-нибудь вроде Ctrl+Alt+C.

20 (изменено: Alectric, 2013-11-06 18:15:44)

Re: AHK: Копирование имён файлов папки в блокнот

Выделите файлы и нажмите F1.

f1::

SendInput,^{vk43}
ClipWait,1
sleep,1000
a:=clipboard
msgbox,%a%

return

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

21

Re: AHK: Копирование имён файлов папки в блокнот


Превратить в список имён, а не полных путей к файлу.
Оставить в буфере, а не выплюнуть меседжбоксом.

22 (изменено: Alectric, 2013-11-06 18:31:48)

Re: AHK: Копирование имён файлов папки в блокнот

Используйте "RegExReplace" предварительно отделив строки.
А еще лучше "SplitPath".

Смотрите справку на этот счет.

Запись в буфер:

Clipboard=какой-то текст
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

23

Re: AHK: Копирование имён файлов папки в блокнот

chegr пишет:


Превратить в список имён, а не полных путей к файлу.
Оставить в буфере, а не выплюнуть меседжбоксом.

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

24

Re: AHK: Копирование имён файлов папки в блокнот

Я был бы весьма признателен за помощь с этим делом.
Я примерно представляю, как работают регулярные выражения, даже когда-то сайт собирал на SSI и переменных... Но разобрать путь и вырезать из него всё слева до крайнего правого слэша.. при этом переведя всё в текст.. да фиг знает как. Синтаксис АХК прост, но очень расплывчат для меня.

25 (изменено: Indomito, 2013-11-07 12:42:51)

Re: AHK: Копирование имён файлов папки в блокнот



Думаю эта команда подойдёт, если нет, то надо искать по перекрёстным ссылкам в англ. справке.

SplitPath

Разделяет имя файла или URL на составные части: имя, каталог, расширение, диск.

SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]

Параметры:

  1. InputVar Имя переменной, которая содержит имя файла для анализа.

  2. OutFileName Имя переменной для сохранения имени файла (без пути к нему). Расширение имени файла включается.

  3. OutDir Имя переменной для сохранения папки файла, включая букву диска или имя сетевого ресурса (если присутствует). Обратная косая черта на конце не ставится, даже если файл находится в корневой папке диска.

  4. OutExtension Имя переменной для сохранения расширения файла (например, TXT, DOC или EXE). Точка не включается.

  5. OutNameNoExt Имя переменной для сохранения имени файла без пути, расширения и точки.

  6. OutDrive Имя переменной для сохранения буквы диска или имени сервера файла. Если файл находится на локальном или подключенном (mapped) сетевом диске, в переменной будет буква диска с двоеточием (без обратной косой черты). Если файл имеет сетевой путь (UNC), переменная будет содержать сетевое имя, например \\Workstation01

Из русской справки, т.е. chm-файла

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

26

Re: AHK: Копирование имён файлов папки в блокнот

Прошло достаточно, а тема фактически не закрыта.
Код, выдающий нужный результат, получился вот таким:

#^vk43:: ;c copy file names
Clipboard =
Send, ^{vk43}
ClipWait
Clipboard := RegExReplace(Clipboard, "m`a).*\\(.*)", "$1")
Sort clipboard
return

27

Re: AHK: Копирование имён файлов папки в блокнот

chegr

Что нужно дописать или изменить, чтобы осталось только имя файла без расширения?

28

Re: AHK: Копирование имён файлов папки в блокнот

tregalka
Чтоб я знал. Я люблю колдунство, но регулярные выражения — это сильное шаманство.
Надо курить мануалы и примеры, например, начав отсюда:
http://stackoverflow.com/questions/624870/regex-get-filename-without-extension-in-one-shot
Задача-то популярная.
Если срастётся, напишите здесь? Мне сейчас очень неудобно экспериментировать

29 (изменено: Malcev, 2016-01-18 13:09:26)

Re: AHK: Копирование имён файлов папки в блокнот

#^vk43:: ;c copy file names
var := Clipboard := ""
Send, ^{vk43}
ClipWait
Loop, Parse, ClipBoard, `n, `r
{
   SplitPath, A_LoopField,,,,fileNameNoEXT
   var .= fileNameNoExt "`n"
} 
msgbox % var
return

30

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

От Души!!!

31

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

Подскажите! А как теперь этот текст (результат) записать в файл.
Пробовал дальше писать:

FileAppend, %var%`n, C:\Users\Y\Desktop\Тест.txt

Ничего не происходит (.

32 (изменено: Malcev, 2016-01-18 13:35:42)

Re: AHK: Копирование имён файлов папки в блокнот

А так?

#^vk43:: ;c copy file names
var := Clipboard := ""
Send, ^{vk43}
ClipWait
Loop, Parse, ClipBoard, `n, `r
{
   SplitPath, A_LoopField,,,,fileNameNoEXT
   var .= fileNameNoExt "`n"
} 
FileAppend, %var%`n, %A_Desktop%\Тест.txt

33

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

Неа, тишина..

34

Re: AHK: Копирование имён файлов папки в блокнот

Попробуйте запустить скрипт с правами администратора, либо создать файл в другой дериктории. (Директория уже должна быть создана. FileAppend ее не создает.)

35

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

И до этого пробовал везде С правами администратора тоже не помогает..

36

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

Пардон! Работает! Только вместо моего файла, он создал новый с названием Тест и пишет туда Это при обычном запуске, без прав адм.
А как теперь быть с другой директорией?) Так по прежнему не работает..

37

Re: AHK: Копирование имён файлов папки в блокнот

А скрипт в utf-8 сохранен?
Версия Ahk Unicode?

А как теперь быть с другой директорией?) Так по прежнему не работает..

не понял вопроса.

38

Re: AHK: Копирование имён файлов папки в блокнот

Malcev

Все разобрался!!! Все работает! БОЛЬШОЕ СПАСИБО!