Показать полную графическую версию : [решено] Групповое переименование файлов по маске
a_sheludko
04-12-2016, 19:53
Доброго времени суток! В написании командных скриптов только разбираюсь. Помогите, пожалуйста, реализовать задачу. Необходимо перемещать файлы картинок из одной папки в другую с переименованием их по маске (001, 002, 003, ...), если файл уже существует, должен добавляться следующий номер. Спасибо заранее всем откликнувшимся за ответ.
megaloman
04-12-2016, 21:38
a_sheludko, Не понятно, что Вы имеете ввиду под маской. Приведите несколько примеров как было имя файла и как должно быть.
a_sheludko
04-12-2016, 23:30
megaloman, то есть есть папка №1 с картинками, и их нужно копировать в папку №2 с именами 001.jpg, 002.jpg и так далее
megaloman, добавлю: «…пропуская нумерацию существующих имён в конечной папке».
a_sheludko, а что делать, если файлов окажется более 999?
@echo off
set "d_in=papka_in"
set "d_out=papka_out"
for /f "delims=" %%a in ('dir/a-d/b "%d_in%\*.jpg"') do set/a n+=1& set "m=00!n!"& copy "%d_in%\%%~nxa" "%d_out%\!m:~-3!%%~xa"
pause>nul
если именно перемещать copy поменяйте на move
что делать, если файлов окажется более 999? »
это остается под вопросом.
a_sheludko
05-12-2016, 01:44
Указал как входящий каталог papka_in с файлами *.jpg, но почему-то ошибка "Синтаксическая ошибка в имени файла, имени папки или метке тома". В чем может быть дело? Вроде все правильно. Возможно, что то "не вижу", не так делаю.
Указал как входящий каталог papka_in с файлами *.jpg, »
Покажите эту строку, как именно указали, в точности до буквы.
...если файл уже существует, должен добавляться следующий номер. »
Необходимо перемещать файлы... »
@echo off
setlocal
set "source=C:\Images\1"
set "destination=C:\Images\2"
if not exist "%source%\" exit /b 1
if not exist "%destination%\" exit /b 2
for /f "delims=" %%i in ('2^>nul dir /a-d /b /on "%source%\*.jpg"') do (
set /a i+=1
for /f %%j in ('set /a i') do (
set "j=00%%j"
cmd /v /c^
for /l %%k in (^) do @^
if not exist "%destination%\!j:~-3!%%~xi" (^
move "%source%\%%i" "%destination%\!j:~-3!%%~xi"^&^
exit /b !i!^
^) else^
^>nul set /a i+=1^&^
set "j=00!i!"
call set i=%%errorlevel%%
)
)
endlocal
exit /b 0
Файлы с восклицательными знаками в имени тоже будут перемещаться и переименовываться:).
a_sheludko
05-12-2016, 09:30
Georgio, спасибо. Работает. Признателен за помощь.
Добрый день , помогите со скриптом для переименования такого типа файла:
P_005418798TM.jpg
P_005418798FM.jpg
P_005418798D1.jpg
P_005418798D2.jpg
и чтобы переименовывалось в:
54187_98_1.jpg
54187_98_2.jpg
54187_98_3.jpg
54187_98_4.jpg
чтобы убирало нули
может быть файлов больше 4-x
P_005418798D5.jpg
P_005418798D7.jpg
54187_98_5.jpg
54187_98_6.jpg
megaloman
28-12-2018, 16:15
@Echo Off
cls
Set "FileIn=Z:\Box_In\P_00*.jpg"
FOR %%f IN ("%FileIn%") DO (
Call Set "Name=%%~nf"
Call :MyRen "%%f" "%%Name:~4,5%%_%%Name:~9,2%%_"
)
pause
GoTo :Eof
:MyRen
Set /A i=101
:Begin
If Not Exist "%~dp1%~2%i:~1%%~x1" Ren %1 "%~2%i:~1%%~x1" >nul &GoTo :Eof
Set /A i+=1
GoTo :Begin
GoTo :Eof
может быть файлов больше 4-x »Set /A i=101 даёт возможность обрабатывать до 99 файлов
Set /A i=1001 даст возможность обрабатывать до 999 файлов
и т д
lovator, вообще-то мало информации о возможных значениях исходных имён файлов, а также о принципах переименования.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.