Показать полную графическую версию : Последовательное, циклическое переименование файлов в каталоге по кругу в cmd.
Foreigner
07-04-2016, 23:03
Так а первый for все-равно весь список пройдет.. »
И что из этого?
Vasylich,
@echo off
setlocal enabledelayedexpansion
for /f "delims= eol=" %%a in ('dir /a-d/b "papka\*.jpg"^|sort /+2147483647') do (
set /a n+=1& set "nf=%%~na"& set "m=0!n!"
if !nf:~^,3! neq new (
ren "papka\%%~nxa" "new!m:~-2!%%~xa"
) else (
ren "papka\%%~nxa" "old!m:~-2!%%~xa"
))
exit /b
.
Так а первый for все-равно весь список пройдет.. »
Vasylich, чем Вас это так тревожит? После первого прохода каталог будет кэширован в памяти, повторный опрос будет читать уже из кэша.
Vasylich
08-04-2016, 08:23
чем Вас это так тревожит? После первого прохода каталог будет кэширован в памяти, повторный опрос будет читать уже из кэша. »
Ничем :) но вспомнилось, что "краткость - сестра таланта".
Foreigner
08-04-2016, 08:38
вспомнилось, что "краткость - сестра таланта". »
Погоня за краткостью выливается в полную нечитаемость. Вспомните ТОТ знаменитый однострочник... Когда, помогите, не печатает
http://www.linux.org.ru/forum/development/392747
Vasylich
08-04-2016, 08:54
Погоня за краткостью выливается в полную нечитаемость. Вспомните ТОТ знаменитый однострочник... Когда, помогите, не печатает
http://www.linux.org.ru/forum/development/392747 »
Согласен. В юности писал на Паскале/С, всегда старался чтобы объектный файл был минимальным и
минимизировал число повторных операций путем замены на логические конструкции. Однако
сильно вырастали пояснения в коде к таким вариантам.
Vasylich
08-04-2016, 09:17
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f "delims= eol=" %%a in ('dir /a-d/b "papka\*.jpg"^|sort /+2147483647') do (
set /a n+=1& set "nf=%%~na"& set "m=0!n!"
if !nf:~^,3! neq new (
ren "papka\%%~nxa" "new!m:~-2!%%~xa"
) else (
ren "papka\%%~nxa" "old!m:~-2!%%~xa"
))
exit /b »
Работает неправильно. То первый становится последним, то наоборот. А должно быть последовательное движение по кругу.
Vasylich
08-04-2016, 11:02
Код: Выделить весь код
Пояснение »
Код работает как нужно, благодарю!!!
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b /on *.jpg') do set /a cnt=1%%~ni-100
ren 01.jpg 01.tmp
for /l %%i in (2,1,%cnt%) do (
set "old=0%%i"
set /a new=%%i-1
set "new=0!new!"
ren !old:~-2!.jpg !new:~-2!.jpg
)
set "cnt=0%cnt%"
ren 01.tmp %cnt:~-2%.jpg »
Код работает, задачу решает, хотя и в обратном порядке :) Т.е. "последний" движется в начало.
Благодарю за помощь!
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for %%i in (*.jpg) do set /a cnt+=1
for /f %%i in ('dir /b *.jpg ^| sort') do (
set "new=0!cnt!"
ren "%%i" "!new:~-2!.tmp"
set /a cnt-=1
)
ren *.tmp *.jpg »
Этот код - не работает. Проблема в логике?
Код: Выделить весь код
@echo off
for /f "delims= eol=" %%a in ('dir /a-d/b "katalog\*.jpg"^|sort /+2147483647') do set /a n+=1& cmd/v/c set "m=0!n!"^& ren "katalog\%%~nxa" "new!m:~-2!%%~xa"
exit /b
.
при следующем запуске, по идее, должно произойти обратное, не проверял. »
Код срабатывает правильно первый раз, затем - не работает.
Vasylich
08-04-2016, 11:18
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f "delims= eol=" %%a in ('dir /a-d/b "papka\*.jpg"^|sort /+2147483647') do (
set /a n+=1& set "nf=%%~na"& set "m=0!n!"
if !nf:~^,3! neq new (
ren "papka\%%~nxa" "new!m:~-2!%%~xa"
) else (
ren "papka\%%~nxa" "old!m:~-2!%%~xa"
))
exit /b »
Это код - не работает.
Foreigner
08-04-2016, 11:45
Код работает, задачу решает, хотя и в обратном порядке Т.е. "последний" движется в начало. »
Как заказывали, так и работает
2. Переименовываем в цикле пока не достигнет конца шаблон ??.jpg: 02->01, 03->02, 04->03 ... с шагом 1 до последний->предпоследний »
Vasylich
08-04-2016, 11:59
Как заказывали, так и работает »
Согласен, сам почему-то так написал :) Но в предыдущем посте писал так:
Зеркально не подойдет. Суть в том, чтобы после каждого срабатывания скрипта последний из списка файл становился 01.jpg, а 01.jpg - 02.jpg и т.д. Т.е. содержимое файлов сдвигалось на 1 по кругу. »
В любом случае благодарю вас за помощь, ваш код задачу решает !
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.