2014-01-31 4 views
0

У меня есть куча jpg-файлов с именем IMG_0001, IMG_0002 и т. Д. Проблема заключалась в том, что мне пришлось удалить пару из них, поэтому мне нужно переименовать файлы, чтобы заполнить пробелы. В сущности,Пакетное переименование файлов в цикле в порядке имени файла?

IMG_0001, IMG_0002, IMG_0004, IMG_0006

переименованы

IMG_0001, IMG_0002, IMG_0003, IMG_0004.

Таким образом, заполнение пробелов, вызванных файлами, которые я удалил. Тем не менее, файл bat, который я написал для этого, иногда мешает файлам не по порядку, поэтому первоначальный IMG_0001 станет IMG_0002, а IMG_0003 станет IMG_0001. Как я могу гарантировать, что мой файл bat будет проходить через файлы в порядке имени?

Это моя летучая мышь файл:

@echo off 
set i=1 
set y=0000 
for %%f in (*.jpg) do call :renameit "%%f" 
goto done 

:renameit 
set x=%y%%i% 
ren %1 IMG_%x:~-4%.jpg 
set /A i+=1 

:done 

ответ

0

Я не думаю, что для опор при заказе на своем собственном, но DIR делает с /on («порядком по имени») переключатель. Так, попробуйте заменить свой цикл FOR с этим:

for /f "tokens=*" %%f in ('dir /b /on *.jpg') do call :renameit "%%f" 
0
@echo off 
setlocal enableextensions enabledelayedexpansion 

for /f "tokens=1,* delims=:" %%a in ('dir /a-d /on /b "IMG_*.jpg"^|findstr /n "^"') do (
    set /a "n=%%a+10000" 
    ren "%%b" "IMG_!n:~-4!.jpg" 
) 

Это просто использует Findstr, чтобы нумеровать список полученных файлов (каждая строка находится в номере формата: имя файла) и использует эту нумерацию, чтобы сделать переименование файлов.

Смежные вопросы