PDA

Показать полную графическую версию : [решено] Групповое переименование файлов по маске


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 и так далее

Iska
05-12-2016, 00:36
megaloman, добавлю: «…пропуская нумерацию существующих имён в конечной папке».

a_sheludko, а что делать, если файлов окажется более 999?

alpap
05-12-2016, 00:49
@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, но почему-то ошибка "Синтаксическая ошибка в имени файла, имени папки или метке тома". В чем может быть дело? Вроде все правильно. Возможно, что то "не вижу", не так делаю.

Iska
05-12-2016, 03:01
Указал как входящий каталог papka_in с файлами *.jpg, »
Покажите эту строку, как именно указали, в точности до буквы.

Georgio
05-12-2016, 06:02
...если файл уже существует, должен добавляться следующий номер. »
Необходимо перемещать файлы... »



@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, спасибо. Работает. Признателен за помощь.

lovator
28-12-2018, 13:51
Добрый день , помогите со скриптом для переименования такого типа файла:

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 файлов
и т д

Iska
28-12-2018, 17:44
lovator, вообще-то мало информации о возможных значениях исходных имён файлов, а также о принципах переименования.




© OSzone.net 2001-2012