Надо найти 40 файлов и удалить!

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
mklink.exe положил в одну папку с createlink.cmd, masks.txt в корень(место поиска) - результата в панели-получателе нет.
Serge Yolkin писал(а):На какую сумму я могу расчитывать за такой батник?
На такуюИзображениеИзображение. Хотя, Бог его знает, может Samwatas расщедрится Изображение.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Попробуй прописать полный путь к mklink.exe или положить его в папку, прописанную в %path%

mklink.exe этот:
MKLINK 1.01 - (c) 2006 Christoph H. Hochstдtter and CNET Networks.
Для
Hard link maker by Killer{R}
попробуй строку

Код: Выделить всё

) do mklink.exe "%%f" "%~3\%%~nxf"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k писал(а):Попробуй прописать полный путь к mklink.exe или положить его в папку, прописанную в %path%
Ага, так работает с переменной окр., %path% не подойдёт - нужна портабельность.

Строка c mlink от Killer-a не срабатывает.

Ещё бы хотелось сохранять структуру при этом.
Для ln.exe и junction.exe не получается то же самое сделать. Для ln синтаксис отличается только параметром -j вместо /h у mklink. У junction так:
junction <junction dir> <junction target dir>
либо
junction -d <junction dir>
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А почему бы не использовать утилиту от Microsoft, которая поставляется с Windows? mklink.exe есть и для XP, и для Vista/7, но в последних она включена в стандартную поставку, а в XP - нет.

Кстати, сразу проверьте программы на поддержку Юникода.

А вообще, написать такую утилиту, которая будет вызывать API-функцию, можно максимум за полчаса.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А почему бы не использовать утилиту от Microsoft, которая поставляется с Windows? mklink.exe есть и для XP, и для Vista/7, но в последних она включена в стандартную поставку, а в XP - нет.
А потому что ты невнимательный. 1 2 :wink:
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):А потому что ты невнимательный. 1 2 :wink:
Я не понял, в чем именно я невнимателен. Ни один пост не указывает явно, что именно я написал не так. А написать подробнее ты не потрудился.

Если Tol!k хочет именно символические ссылки, он должен иметь ОС Vista или 7. Но в таком случае его система уже должна располагать утилитой mklink. Если же у него XP, то о символических ссылках можно только мечтать, так как система XP их просто не поддерживает.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

MVV
Позволю себе напомнить, что термин "символическая ссылка" в разных операционных системах по милости MS означает разные вещи.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А написать подробнее ты не потрудился.
Тружусь: ты спросил "а почему бы не использовать", я даю ссылки, где mklink от Microsoft и описывается, что в первом, что во втором случае. По-моему это понятно из постов и ссылки, ведущей на описание синтаксиса данной утилиты. Ничего не забыл?
MVV писал(а):Если Tol!k хочет именно символические ссылки, он должен иметь ОС Vista или 7. Но в таком случае его система уже должна располагать утилитой mklink. Если же у него XP, то о символических ссылках можно только мечтать, так как система XP их просто не поддерживает.
То, чего хочет Tol'k(а правильней сказать "что ему нравится"), - это отдельный вопрос (т.е. его личное дело), и он выпадает из обрисованной мной ситуации.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Тружусь: ты спросил "а почему бы не использовать", я даю ссылки, где mklink от Microsoft и описывается, что в первом, что во втором случае. По-моему это понятно из постов и ссылки, ведущей на описание синтаксиса данной утилиты. Ничего не забыл?
Спасибо, я уловил мысль. Просто в последнем посте Tol!kа упоминались строки (c) 2006 Christoph H. Hochstдtter and CNET Networks и Hard link maker by Killer{R}, которые ну никак не могут иметь отношения к утилите от Microsoft.
Avada писал(а):MVV
Позволю себе напомнить, что термин "символическая ссылка" в разных операционных системах по милости MS означает разные вещи.
Хотелось бы взглянуть на официальный источник, использующий термин "символическая ссылка" ("symbolic link") в отношении точек соединения ("junction")... Ага, нашел у Руссиновича в описании Junction. А тут нашел упоминание термина "symbolic link" непосредственно от Microsoft, и в этом тексте у термина еще одно значение - то, которое сейчас принадлежит термину "mount point" ("точка монтирования").

Но замечу, что ребята в рамках данной темы обсуждали использование ссылок применительно к файлам, а точки соединения, некогда неправильно названные символическими ссылками, возможны только для каталогов - то есть, они использовали правильный термин.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Просто в последнем посте Tol!kа упоминались строки (c) 2006 Christoph H. Hochstдtter and CNET Networks и Hard link maker by Killer{R}, которые ну никак не могут иметь отношения к утилите от Microsoft.
Хм.. Синтаксис тот же. Сравни со своей, пожалуйста, а то у меня сейчас негде.

Добавлено
: хотя нет, это же Open Source, к Microsoft точно никакого отношения не имеет, хотя по функционалу ничуть не уступает аналогу.
Я забирал на Хабре сперва, где описание было утилиты от Microsoft, а оказалось автор не упомянул, что по ссылке утилита-двойник от немецкого прогера.
Но тут у меня другая мысль: дата создания утилиты - 2006 г., Висту начали продавать с февраля 2007-го, ссылка с оффсайта на утилиту мёртвая. Допустим ли вариант с перекупкой копирайта мелкомягкими?
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

MVV писал(а):А почему бы не использовать утилиту от Microsoft...
Я и хотел её использовать, да никто её не даёт.
Flasher писал(а):Для ln.exe и junction.exe не получается то же самое сделать.
Для директорий нужны другие ключи

Код: Выделить всё

MKLINK 1.01 - (c) 2006 Christoph H. Hochstдtter and CNET Networks.
...
    /D Creates a symbolic link for a directory.
    ...
    /J Creates a junction for a directory.
поэтому я отфильтровал только файлы.

Код: Выделить всё

'for /f "usebackq delims=" %%a in ^("%~1"^) do @dir /ad/b/s "%~2\%%a"'
— это будут только директории.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher писал(а):Ещё бы хотелось сохранять структуру при этом.
Для файлов:

Код: Выделить всё

@echo off &chcp 1251 >nul

rem Создать в целевой папке ссылки с сохранением путей для файлов подходящих под маски

rem Параметры: маски.txt D:\где_искать\ D:\куда_складывать\
rem Пример параметров для TC: D:\маски_поиска.txt "%P" "%T"

setlocal enableextensions
set "pth=%~p2" &set "trg=%~3"
for /f "delims=" %%f in (
'for /f "usebackq delims=" %%a in ^("%~1"^) do @dir /a-d/b/s "%~2\%%a"'
) do call :p "%%f"
goto :eof

:p
set "p=%~p1"
call set "p=%%p:%pth%=%%"
if not exist "%trg%\%p%" md "%trg%\%p%"
mklink /h "%trg%\%p%%~nx1" %1
goto :eof
Последний раз редактировалось Tol!k Сб окт 02, 2010 06:36, всего редактировалось 1 раз.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Serge Yolkin писал(а):На какую сумму я могу расчитывать за такой батник?
Зачем же заниматься мазохизмом с батниками? Если у меня появится похожая задача, я просто возьму более совершенный инструмент (в качестве такового у меня пока выступает АвтоИт), с помощью которого можно легко и не напрягаясь сделать всё, что мне нужно будет. Так что от меня не стоит рассчитывать даже на $1 (не говоря уж о 10). :D
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Tol!k писал(а):Я и хотел её использовать, да никто её не даёт.
Однако, команда есть, а файла mklink.exe нигде нет :roll: Win7 x32

Код: Выделить всё

C:\Windows\System32>mklink
Создание символической ссылки.

MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение

        /D          Создание символической ссылки на каталог.
                    По умолчанию создается символическая ссылка на файл.
        /H          Создание жесткой связи вместо символической ссылки.
        /J          Создание соединения для каталога.
        Ссылка      Имя новой символической ссылки.
        Назначение  Путь (относительный или абсолютный), на который ссылается новая ссылка.
Может она куда в cmd зашита?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, в Windows 7 mklink - это команда командного интерпретатора (если просмотреть содержимое CMD.exe в Юникоде, эта строка будет найдена среди кучи строк других команд). А даже если бы был экзешник, под Windows XP он бы не запустился - импортирует функции, отсутствующие в ядре XP (как минимум, функцию CreateSymbolicLinkW из библиотеки kernel32.dll). Мне почему-то казалось, что есть ее аналог для Windows XP (создающий точки соединения и жесткие ссылки).

Под XP в официальном дополнительном наборе инструментов есть утилита linkd. Также можно использовать утилиту junction от Марка Руссиновича. Но они умеют создавать только точки соединения для папок, жесткие ссылки на файлы ими не создать.
Ответить