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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение расширения (http://forum.oszone.net/showthread.php?t=324898)

vk_k14m@vk 16-03-2017 02:00 2719849

Изменение расширения
 
Есть папка "data", в ней еще много папок, к примеру:
01
3d
4f
7a
8a и т.д.
В каждой такой папке аналогичные папки. А уже в тех папках лежат файлы такого типа:
019a56fee5449135405eb822965851a4.jpg@25
3dba22336cd5574115db3679b669e6b0.jpg@26
4fcdc7a7e87b5e41f3bdf0059a917609.jpg@27 и т.д. Расширение может быть от jpg@0 до jpg@9999999
Нужен BAT файл, который помещался б в папку "data". И при запуске создавал бы символические ссылки на файлы с расширениями "jpg@0-9999999" с правильным расширением "jpg" в той же папке где лежат оригиналы. Не трогая файлы с другими расширениями.

Такое возможно?

Iska 16-03-2017 08:30 2719878

Цитата:

Цитата vk_k14m@vk
Есть папка "data", в ней еще много папок, … В каждой такой папке аналогичные папки. А уже в тех папках лежат файлы »

Сколько уток в зайце уровней вложенности будет? Сколько может быть?

Цитата:

Цитата vk_k14m@vk
И при запуске создавал бы символические ссылки »

Почему символические, почему не жёсткие (hardlink)?

Цитата:

Цитата vk_k14m@vk
на файлы с расширениями "jpg@0-9999999" с правильным расширением "jpg" в той же папке где лежат оригиналы. »

А если внезапно окажется, что одноимённый файл «с правильным расширением» уже существует?

Наконец, почему бы просто не переименовать файлы, убрав @ и всё, что за ним, в расширении?

vk_k14m@vk 16-03-2017 17:59 2720055

Цитата:

Цитата Iska
Сколько уток в зайце уровней вложенности будет? Сколько может быть? »

2-3 не больше. Например:
data\0c\d7
data\42\96
data\sample\4e\6a
data\sample\c3\0e

Цитата:

Цитата Iska
Почему символические, почему не жёсткие (hardlink)? »

В принципе можно и жесткие ссылки. Это не принципиально

Цитата:

Цитата Iska
А если внезапно окажется, что одноимённый файл «с правильным расширением» уже существует? »

Пропускать либо заменять. Что легче? А вообще таких файло быть не может, только если я сам их не создам.

Цитата:

Цитата Iska
Наконец, почему бы просто не переименовать файлы, убрав @ и всё, что за ним, в расширении? »

По тому что эти файлы создает программа по загрузке сайтов. Я с одного сайта качаю все картинки. И этот сайт хранит их по умному, "jpg@27" означает что эта картинка на сайте была загружена 27-й по счету. Их уже на 15 гигов накачалось и это даже не половина. Я конечно могу через Тотал Командер изменить все неправильные расширения на правильные. Но тогда загрузчик скачает их заново, а это трата времени и дополнительно 15 гигов на жестком диске. Так же я могу сделать копии всех этих файлов в другом месте и изменить их расширения, тогда загрузчик не будет перекачивать оригиналы, но опять же 15 лишних гигов на диске.

По этому я и хочу сделать ссылки (жесткие или символические) на эти файлы, что б работать с ними.

alpap 16-03-2017 18:09 2720057

может просто буферный конвеер сделать
при запуске bat или отдать во власть шедулера, проверяем наличие свежих за сутки (час), забрасываем для операций пациентов с ампутированием расширения до рабочего состояния - вариант?

vk_k14m@vk 16-03-2017 18:16 2720059

Цитата:

Цитата alpap
может просто буферный конвеер сделать
при запуске bat или отдать во власть шедулера, проверяем наличие свежих за сутки (час), забрасываем для операций пациентов с ампутированием расширения до рабочего состояния - вариант? »

Может быть и вариант, но я не знаю что за буферный конвеер и как его сделать.

alpap 16-03-2017 18:40 2720072

vk_k14m@vk,
например так, при запуске bat проверит файлы по дате создания, пропустит (оставит) самый старый по дате (самый свежий скачанный), который будет выступать в качестве флага для программы по скачиванию, у него будет максимальное число в расширении, если конечно программа проверяет только это, иначе надо знать что еще проверяет, например, наличие всех файлов, тогда надо подумать

оставит самый свежий, остальные переместит в нужную папку и приведет расширение в порядок (если вами правильно оно указано)
Код:

@echo off
set "d_in=Папка с файлами закачиваемых картинок"
set "d_out=papka_out"
for /f "skip=1 delims=" %%a in ('dir /a-d/b/o-d/tc "%d_in%"') do (
 if not exist "%d_out%" md "%d_out%"
 >nul move "%d_in%\%%a" "%d_out%\%%~na.jpg"
)
exit

а уж как и чем и когда запускать - шедулер в помощь

vk_k14m@vk 16-03-2017 19:56 2720094

Цитата:

Цитата alpap
например так, при запуске bat проверит файлы по дате создания, пропустит (оставит) самый старый по дате (самый свежий скачанный), который будет выступать в качестве флага для программы по скачиванию, у него будет максимальное число в расширении, если конечно программа проверяет только это, иначе надо знать что еще проверяет, например, наличие всех файлов, тогда надо подумать
оставит самый свежий, остальные переместит в нужную папку и приведет расширение в порядок (если вами правильно оно указано)
Код:
@echo off
set "d_in=Папка с файлами закачиваемых картинок"
set "d_out=papka_out"
for /f "skip=1 delims=" %%a in ('dir /a-d/b/o-d/tc "%d_in%"') do (
if not exist "%d_out%" md "%d_out%"
>nul move "%d_in%\%%a" "%d_out%\%%~na.jpg"
)
exit
а уж как и чем и когда запускать - шедулер в помощь »

Программа проверяет только наличие файлов по их имени и расширении. И при каждом старте загрузки. Если б я круглые сутки качал без отключения ПК, то проверок бы не было. А так при каждом запуске проверяются все файлы на наличие, а потом докачиваются отсутствующие. Проверки на размер файла нет. Значит можно подсунуть любой файл, лишь бы имя и расширение подходило.

alpap 16-03-2017 23:42 2720185

Цитата:

Цитата vk_k14m@vk
при каждом запуске проверяются все файлы на наличие »

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

Цитата:

Цитата vk_k14m@vk
эти файлы создает программа по загрузке сайтов »

а если не секрет - ссылочку

vk_k14m@vk 17-03-2017 00:59 2720203

Цитата:

Цитата alpap
вы так думаете или проверили? »

Проверял.

Цитата:

Цитата alpap
если программе достаточно одного с максимальным номером - это конечно превосходно
создать необходимую кучу с нужными именами.расш пустых файлов до нужного номера тоже не проблема, »

Вот только я не знаю в какой папке какой файл с каким каким номером должен лежать.

Цитата:

Цитата alpap
но может есть возможность покрутить настройки программы по части поиска и закачки? »

Есть такие опции. Пробовал все, и все равно докачивает переименованные файлы.
Скрытый текст



Цитата:

Цитата alpap
а если не секрет - ссылочку »

Не секрет конечно
https://rutracker.org/forum/viewtopic.php?t=5346113

З.Ы. А может есть способ массово зарегистрировать файлы с расширениями:
jpg@0
jpg@1
jpg@2
jpg@3
...
jpg@9999999
Как изображения. Что б работать с оригиналами.

Iska 17-03-2017 02:42 2720219

vk_k14m@vk, никакой скрипт Вам не нужен. Только понадобится Вам для этого не Total Commander, а Far Manager (Far Manager Official Site : загрузить). Загружаете стабильную сборку msi соответствующей разрядности, устанавливаете в полном объёме, переключаете на русский язык (F9, Options, Languages). Запускаете, переходите на одной панели в исходный каталог, на другой — в целевой:
Скрытый текст

Находясь в исходном каталоге, выделяете все папки и файлы посредством CtrlMultiply (Ctrl+Серая звёздочка), нажимаете AltF6 для создания жёстких ссылок:
Скрытый текст

В диалоговом окне «Ссылка» 1) устанавливаете параметр «[x] Использовать фильтр», после чего 2) нажимаете кнопку «[ Фильтр ]»:
Скрытый текст

В диалоговом окне «Меню фильтров» нажимаете клавишу Ins (Insert), дабы добавить новый фильтр:
Скрытый текст

В диалоговом окне «Фильтр» задаёте 1) какое-нибудь имя фильтра в поле «Имя фильтра:», 2) устанавливаете (если уже не установлен) параметр «[x] Маска:» и 3) задаёте в этом же поле маску файлов в виде «*.jpg*», после чего 4) нажимаете «{ OK }»:
Скрытый текст

После возвращения в диалоговое окно «Меню фильтров» помечаем наш новосозданный фильтр пробелом или плюсом:
Скрытый текст

Должно получиться наподобие:
Скрытый текст

После этого мы закрываем диалоговое окно «Меню фильтров» нажатием Enter и возвращаемся в диалоговое окно «Ссылка». В нём нам осталось нажать «{ Создать ссылку }» (или сочетание клавиш CtrlEnter).

Как видно:
Скрытый текст

в целевой панели были созданы папки, аналогичные находящимся в исходном каталоге. На находящиеся в исходном каталоге (и вложенных в неё папках) файлы, попадающие под заданную нами маску, были созданы жёсткие ссылки в целевом каталоге:
Скрытый текст

Файлы, не попадающие под маску, так и остались выделены в исходном каталоге (в примере — это файл «0001.txt»). Можно снять с них выделение по маске, нажав Subtract (Серый минус).


Теперь нажимаем Tab для перехода в целевую папку и AltF7 для вызова диалогового окна поиска. В этом окне указываем 1) маску, 2) область поиска и 3) нажимаем кнопку «{ Искать }»:
Скрытый текст

После того, как все файлы 1) будут найдены, нажимаем кнопку «[ Панель ]»:
Скрытый текст

Используя клавишу Add (Серый плюс), выделяем все найденные файлы, затем нажимаем F6, задаём 1) маску для переименования и 2) нажимаем «{ Переименовать }»:
Скрытый текст

Готово!

Когда Вам потребуется «обновить» целевую папку новыми файлами — Вы просто выделяете всё её содержимое и удаляете напрямую, минуя Корзину. Затем повторяете описанные операции (если сохраните конфигурацию — заново создавать фильтр не потребуется).

Update: Хах, самое главное забыл — переименование :). Добавил и кое-что поправил.

vk_k14m@vk 17-03-2017 04:47 2720226

Цитата:

Цитата Iska
vk_k14m@vk, никакой скрипт Вам не нужен. Только понадобится Вам для этого не Total Commander, а Far Manager (Far Manager Official Site : загрузить). Загружаете стабильную сборку msi соответствующей разрядности, устанавливаете в полном объёме, переключаете на русский язык (F9, Options, Languages). Запускаете, переходите на одной панели в исходный каталог, на другой — в целевой:
Скрытый текст
Находясь в исходном каталоге, выделяете все папки и файлы посредством CtrlMultiply (Ctrl+Серая звёздочка), нажимаете AltF6 для создания жёстких ссылок:
Скрытый текст
В диалоговом окне «Ссылка» 1) устанавливаете параметр «[x] Использовать фильтр», после чего 2) нажимаете кнопку «[ Фильтр ]»:
Скрытый текст
В диалоговом окне «Меню фильтров» нажимаете клавишу Ins (Insert), дабы добавить новый фильтр:
Скрытый текст
В диалоговом окне «Фильтр» задаёте 1) какое-нибудь имя фильтра в поле «Имя фильтра:», 2) устанавливаете (если уже не установлен) параметр «[x] Маска:» и 3) задаёте в этом же поле маску файлов в виде «*.jpg*», после чего 4) нажимаете «{ OK }»:
Скрытый текст
После возвращения в диалоговое окно «Меню фильтров» помечаем наш новосозданный фильтр пробелом или плюсом:
Скрытый текст
Должно получиться наподобие:
Скрытый текст
После этого мы закрываем диалоговое окно «Меню фильтров» нажатием Enter и возвращаемся в диалоговое окно «Ссылка». В нём нам осталось нажать «{ Создать ссылку }» (или сочетание клавиш CtrlEnter).
Как видно:
Скрытый текст
в целевой панели были созданы папки, аналогичные находящимся в исходном каталоге. На находящиеся в исходном каталоге (и вложенных в неё папках) файлы, попадающие под заданную нами маску, были созданы жёсткие ссылки в целевом каталоге:
Скрытый текст
Файлы, не попадающие под маску, так и остались выделены в исходном каталоге (в примере — это файл «0001.txt»). Можно снять с них выделение по маске, нажав Subtract (Серый минус).
Теперь нажимаем Tab для перехода в целевую папку и AltF7 для вызова диалогового окна поиска. В этом окне указываем 1) маску, 2) область поиска и 3) нажимаем кнопку «{ Искать }»:
Скрытый текст
После того, как все файлы 1) будут найдены, нажимаем кнопку «[ Панель ]»:
Скрытый текст
Используя клавишу Add (Серый плюс), выделяем все найденные файлы, затем нажимаем F6, задаём 1) маску для переименования и 2) нажимаем «{ Переименовать }»:
Скрытый текст
Готово!
Когда Вам потребуется «обновить» целевую папку новыми файлами — Вы просто выделяете всё её содержимое и удаляете напрямую, минуя Корзину. Затем повторяете описанные операции (если сохраните конфигурацию — заново создавать фильтр не потребуется).
Update: Хах, самое главное забыл — переименование . Добавил и кое-что поправил. »

Какой объемный ответ. И наверняка правильный. Завтра (уже сегодня) попробую этот вариант. Надеюсь подойдет...


Время: 16:02.

Время: 16:02.
© OSzone.net 2001-