Копирование с переименовыванием по счетчику

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

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

deniel87
Сообщения: 3
Зарегистрирован: Вс май 02, 2010 15:05

Копирование с переименовыванием по счетчику

Сообщение deniel87 »

Здравствуйте.Можно ли реализовать такую весч в TC?Например имееться папка приемник,я перетаскиваю в нее файл ******.jpg и он сохраняеться как 001.jpg Перетаскиваю следующий файл *****.jpg и он сохраняеться как 002.jpg и так далее по счетчику.При этом главное чтоб TC у меня ничего не спрашивал,а сразу сохранял файл с новым именем.Пакетное переименовывание не подходит так как исходные файлы раскиданы по разным папкам.И я в ручную просматрюю и копирую файл который мне нужен.Заранее благодарен!
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

Первый блин:
катастрофически падает скорость при большом кол-ве файлов в целевой папке

Del
Не такая тормознутая версия здесь

Сохрани код в текстовый файл с расш. CMD;
создай кнопку;
выделяй файлы и нажимай кнопку
Последний раз редактировалось Tol!k Пн май 03, 2010 13:40, всего редактировалось 6 раз.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Код работает, а если хочется сохранять не 00001, 00002... , а
Изображение_001, Изображение_002.... т.е. если в коде был бы третий параметр, куда вставлять начальное имя, было бы здорово
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

Сделал необязательный третий параметр. Код во втором посте.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Спасибо работает! В первом посте речь шла о файлах, но в название общее. Почему бы и для папок не сделать то же самое
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

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

@echo off &chcp 1251 >nul
rem  Копирование файлов и папок с переименованием по счётчику
rem  Параметры кнопки: %L "%T" "Приставка_"
rem  или: %L "d:\куда копировать\"
rem  Автор: Tol!k

set "targ=%~2" &set "prist=%~3"
setlocal enableextensions
for /f "usebackq delims=" %%f in ("%~1") do call :p "%%f"
exit /b

:p
set "name=%~1" &set "ext=%~x1"
set "n=0"
call :loop 1000 &set /a n-=1000
call :loop 100 &set /a n-=100
call :loop 10 &set /a n-=10
call :loop 1
title %new%
if "%name:~-1%"=="\" (
xcopy "%name%*" "%targ%\%new%" /i /s/e /k/r/h >nul
) else (
echo f| xcopy "%name%" "%targ%\%new%" /k/r/h >nul
)
goto :eof

:loop
if "%n%"=="9999" (
title STOP
echo 9999 единиц в месте назначения,
echo недостаточно разрядности счётчика.
pause >nul &exit
)
set /a n+=%1
set "e=000%n%"
set "e=%e:~-4%"
set "new=%prist%%e%%ext%"
if exist "%targ%\%new%" call :loop %1
goto :eof
Последний раз редактировалось Tol!k Пн май 03, 2010 16:50, всего редактировалось 3 раза.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Tol!k спасибо! Ещё одна просьба, у меня в папке приёмнике ведётся несколько списков по именам. Т.е. если файл с именем Info, то он записывается как Info_0001, (проверяется твоим скриптом) Info_0002... Но там ещё и другие файлы записываются подобным образом txt_0001..., ini_0001.. Если добавить третий параметр %O, то поодиночке добавлять файлы\папки можно, а при выделении сравнение происходит по одному имени. Можно ли рассмотреть третий параметр %F.
Может запутанно, но вот как частный вариант этого: параметры скрипта %L %p %F - копируют файлы и папки в ту же панель с проверкой нет ли подобного имени и добавлением 000N+1
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

Не понял. Давай примеры, что было и что должно получиться.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Есть папка приёмник, в которой уже находятся файлы и папки:
Музыка_0001
Музыка_0002
Info_0001.txt
Info_0002.txt
Info_0003.txt
Txt_0001.txt
...
необходимо выделенные папки и файлы скопировать туда же с добавлением 000N и с сохранённым началом именем, пример:
(Я выделяю папку Музыка, файл Info.txt , Txt.txt ... нажимаю .cmd и они копируются в папку приёмник)
Музыка -> Музыка_0003
Info.txt -> Info_0004.txt
Txt.txt -> Txt_0002.txt
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

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

@echo off &chcp 1251 >nul
rem  Копирование файлов и папок с добавлением счётчика
rem  Параметры кнопки: %L "%T"
rem  или: %L "d:\куда копировать\"
rem  Автор: Tol!k

set "targ=%~2"
setlocal enableextensions
for /f "usebackq delims=" %%f in ("%~1") do call :p "%%f" "%%f."
exit /b

:p
set "prist=%~n1"
if "%prist%"=="" set "prist=%~n2"
set "name=%~1" &set "ext=%~x1"
set "n=0"
call :loop 1000 &set /a n-=1000
call :loop 100 &set /a n-=100
call :loop 10 &set /a n-=10
call :loop 1
title %new%
if "%name:~-1%"=="\" (
xcopy "%name%*" "%targ%\%new%" /i /s/e /k/r/h >nul
) else (
echo f| xcopy "%name%" "%targ%\%new%" /k/r/h >nul
)
goto :eof

:loop
if "%n%"=="9999" (
title STOP
echo 9999 единиц в месте назначения,
echo недостаточно разрядности счётчика.
pause >nul &exit
)
set /a n+=%1
set "e=000%n%"
set "e=%e:~-4%"
set "new=%prist%_%e%%ext%"
if exist "%targ%\%new%" call :loop %1
goto :eof
+ Добавил скорости в этом и предыдущем батнике
Последний раз редактировалось Tol!k Пн май 03, 2010 16:49, всего редактировалось 3 раза.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Огромное спасибо Tol!k! Спасибо за скорость. Остался маленький вопрос. Вылетающее окно командной строки можно ли как-то скрыть или в фоне организовать.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

В настройках кнопки есть галка "в свёрнутом виде"
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Вот за этот совет Tol!k тебе отдельное спасибо! Тоталом пользуюсь примерно 4-5 лет, а этой кнопкой никогда не использовал, теперь буду знать!!!
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

+ Добавил проверку переполнения счётчика.
Раньше после №9999 создавался №0000, а затем обработка аварийно прерывалась с сообщением о переполнении стека.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Кнопка:

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

[em_FileCopy]
button=%COMMANDER_PATH%\ICO\em_FileCopy.ico
cmd=cmd /c title Копия... &
param=for %%U in (%S) do echo f|xcopy/y/c/h/r/k/g/z %%U "Копия %%~nU%%~xU"
iconic=1
menu=Создать копию файла
Необходима аналогичная для создания пяти копий одного файла.
Файл "Хмурый":
- "Копия Хмурый"
- "Копия Хмурый (2)"
- "Копия Хмурый (3)"
- "Копия Хмурый (4)"
- "Копия Хмурый (5)"
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Ответить