Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как найти и удалить символьную ссылку (http://forum.oszone.net/showthread.php?t=262312)

TERMINAL 12-06-2013 12:42 2166358

Как найти и удалить символьную ссылку
 
Здравствуйте, используется система Windows 7 и мне нужно найти символьные ссылки и удалить их для создания новых путей. Возможно ли это в AutoIt ?

Iska 12-06-2013 12:58 2166369

Цитата:

Цитата TERMINAL
Возможно ли это в AutoIt ? »

Это возможно и без AutoIt: Junction.

TERMINAL 12-06-2013 13:13 2166381

Iska, В AutoIt при копировании папки можно определить-существуют ли в ней символьные ссылки, если ДА, то не копировать. У меня проблема-копирую папку средствами AutoIt и в итоге копируются не символьные ссылки (которые потом изменять нужно на новый путь), а целые папки.

Iska 12-06-2013 13:34 2166393

Цитата:

Цитата TERMINAL
В AutoIt при копировании папки можно определить-существуют ли в ней символьные ссылки, »

Не вижу такого: Function DirCopy. О какой функции копирования папки идёт речь?

TERMINAL 12-06-2013 14:15 2166415

Хочу перенести папку с С:\Users\test\Documents в D:\Users\test\Documents, и в С:\Users\test\Documents находятся маркерные ссылки, Мои видеозаписи, Мои рисунки, Моя музыка, которые после копирования превращаются в папки.

Iska 12-06-2013 14:44 2166432

А, так фразу «при копировании папки можно определить» следует понимать как «хотелось бы иметь возможность при копировании папки».

Symbolic Link Effects on File Systems Functions (Windows)

TERMINAL, возьмите какой-нибудь OpenSource'ный проект, где имеется реализация функций копирования с поддержкой точек повторного подключения (например, файловый менеджер Far Manager (Far Manager Official Site : исходный*код)) и посмотрите, как сие там реализовано.

читать дальше »
Цитата:

Код:

╔════════════════════════════════════════════════════════════════════ Помощь - FAR ════════
║ Копирование: правила
╟──────────────────────────────────────────────────────────────────────────────────────────
║  При копировании/перемещении папок и символических ссылок соблюдаются следующие правила.

║  Копирование символической ссылки

║  Если включена опция "Копировать содержимое символических ссылок"
║  или источник или приёмник - сетевые диски, то в приёмнике
║  создаётся папка и в неё копируется содержимое ссылки-источника
║  (для вложенных ссылок рекурсивно).

║  Если опция "Копировать содержимое символических ссылок" выключена,
║  и источник и приёмник - локальные диски, то в приёмнике создаётся
║  связь или символическая ссылка, в зависимости от типа источника.

║  Перемещение символической ссылки

║  Если включена опция "Копировать содержимое символических ссылок"
║  или источник или приёмник - сетевые диски, то в приёмнике
║  создаётся папка и в неё копируется содержимое ссылки-источника
║  (для вложенных ссылок рекурсивно). Сама ссылка в источнике
║  удаляется.

║  Если опция "Копировать содержимое символических ссылок" выключена,
║  и источник и приёмник - локальные диски, то ссылка-источник просто
║  переносится. Рекурсивный спуск по дереву не производится.

║  Перемещение каталога, содержащего символические ссылки

║  Если источник и приёмник - локальные диски, то каталог просто
║  перемещается.

║  Если источник или приёмник - сетевые диски, то независимо от
║  состояния опции "Копировать содержимое символических ссылок"
║  в приёмнике создаётся папка и в неё копируется содержимое
║  ссылки-источника (для вложенных ссылок рекурсивно).
║  Сама ссылка в источнике удаляется.



TERMINAL 12-06-2013 15:33 2166472

Iska, Так мне Фар и другие программы не нужны, хочу сделать это программно на AutoIt !

Iska 12-06-2013 17:58 2166588

TERMINAL, я и говорю — смотрите код того же Far Manager'a на С — как там реализовано копирование символических ссылок — и переводите его на AutoIt. Какие-то функции WinAPI уже есть в WinAPI.au3 и WinAPIEx.au3.

TERMINAL 13-06-2013 09:53 2166888

Цитата:

Цитата Iska
смотрите код того же Far Manager'a на С »

Низнаю как код Far`а просмотреть, одни dll-ки.

Iska 13-06-2013 10:19 2166895

Far Manager Official Site : исходный*кодИсходный код Far Managercopy.cpp + flink.cpp.

Можете разобраться и сами, прочитав: Reparse Points and File Operations (Windows) и Symbolic Link Effects on File Systems Functions (Windows), создать точки повторной обработки разного типа и поиграться с ними, вызывая из AutoIt WinAPI функции копирования с разными флагами, пока не добьётесь нужного поведения.

Мне, правда, непонятно, почему Вы не хотите просто воспользоваться mklink/Junction для изложенных выше:
Цитата:

Цитата TERMINAL
Хочу перенести папку с С:\Users\test\Documents в D:\Users\test\Documents, и в С:\Users\test\Documents находятся маркерные ссылки, Мои видеозаписи, Мои рисунки, Моя музыка, которые после копирования превращаются в папки. »

целей.

TERMINAL 13-06-2013 11:31 2166936

Цитата:

Цитата Iska
Мне, правда, непонятно, почему Вы не хотите просто воспользоваться mklink/Junction для изложенных выше: »

Я бы с удовольствием, это бы упростило бы работу, но как я писал раньше-копируются папки на которых ссылка-поэтому приходится после полного копирования их потом удалять и с помощью mklink делать ссылки-тогда всё чудесно. Проблема в том что при копировании (DirCopy) AutoIt не понимает этих ссылок и принимает их за папки.

Iska 13-06-2013 13:26 2166994

А не надо делать «полное копирование».

TERMINAL 13-06-2013 13:42 2167014

Цитата:

Цитата Iska
А не надо делать «полное копирование» »

А как тогда ? По папкам тот же результат будет...

Iska 13-06-2013 15:57 2167089

Рассматриваете каждый объект файловой системы на предмет того, является ли он точкой повторной обработки и соответственно полученному поступаете. Я же не знаю, что Вы подразумеваете под «переносом «Users» на «D:\»». Вот, например:
«All Users» — это ссылка на «C:\ProgramData»
Код:

╔═════════════════════════════════════ C:\Users ════════════════╤══════╤════════╤═════╗
║n                            Name                              │ Size │  Date  │Time ║
║..                                                            │  Up  │03.03.11│01:43║
All Users                                                      │Symlin│14.07.09│09:06║
║Default                                                                      1│18:50║
║Default    ╔═════════════════════════ Attributes ═════════════════════════╗  9│09:06║
║Public    ║                  Change file attributes for                  ║  9│08:57║
║Админист  ║                          All Users                          ║  1│18:52║
║Админист  ║ Symlink:    C:\ProgramData                                  ║  3│18:13║
║Все поль  ╟──────────────────────────────────────────────────────────────╢  1│18:50║


Вы «C:\ProgramData» будете переносить на «D:\»? Или оставите на месте? Если оставляете — этот объект файловой системы нужно копировать как именно как точку повторной обработки (или банально создать такую же по новому месту). Если будете переносить — копировать смысла не имеет, поскольку симлинк «D:\All Users» должен будет уже ссылаться на «D:\ProgramData». И т.п.

Далее, например, есть у нас:
«Default User» — точка повторной обработки вида Junction, ссылающаяся на «C:\Users\Default»
Код:

╔═════════════════════════════════════ C:\Users ════════════════╤══════╤════════╤═════╗
║n                            Name                              │ Size │  Date  │Time ║
║..                                                            │  Up  │03.03.11│01:43║
║All Users                                                      │Symlin│14.07.09│09:06║
║Default                                                        │Folder│13.01.11│18:50║
Default User                                                  │Juncti│14.07.09│09:06║
║                                                                      │14.07.09│08:57║
║  ╔═════════════════════════ Attributes ═════════════════════════╗  │13.01.11│18:52║
║  ║                  Change file attributes for                  ║  │05.02.13│18:13║
║  ║                        Default User                        ║  │13.01.11│18:50║
║  ║ Junction:    C:\Users\Default                                ║  │21.05.13│17:04║
║  ╟──────────────────────────────────────────────────────────────╢  │14.07.09│08:57║


Что с этим делать? Если не копировать эту точку повторной обработки именно как точку повторной обработки — будет создана простая папка «Default User» в «D:\Users». Если копировать как точку повторной обработки — будет «D:\Users\Default User», ссылающаяся на «С:\Users\Default». И толку-то? Нам-то надо получить ссылку на «D:\Users\Default». Понимаете?


Время: 14:46.

Время: 14:46.
© OSzone.net 2001-