2014-02-05 4 views
0

Во-первых, я знаю, что на Stackexchange существует много вопросов по переименованию файлов, но никаких поисков здесь или в Интернете не было найдено ни одного удовлетворительного результата. Кроме того, я знаю, что это, вероятно, может быть сделано другими способами, но я всегда мог заставить командные файлы работать так, как я хочу (простые задачи, не слишком сложные). Даже если я нахожу более легкое решение (например, с помощью инструмента с графическим интерфейсом), я все равно хотел бы решить эту проблему для получения знаний.Переименование файла с несколькими подстроками

Я пытаюсь переименовать кучу изображений, которые я (регулярно) импортирую с моего телефона. Шаблон имени по умолчанию для изображений: IMG_YYYYMMDD_HHMMSS.jpg; например: IMG_20121224_165222.jpg

Итак, скажем, у меня есть папка, полная этих файлов (вместе с другими). Я хочу, чтобы выбрать файл, начиная с IMG и переименуйте файл в следующем формате: YYYY-MM-DD HH.MM.SS.jpg

Это казалось довольно тривиальным мне начать с помощью подстроки, но я не мог заставить его работать. Я использовал задержанное расширение для переменных; Я добавил код, который я использую, до конца этого сообщения.

Теперь для примера, приведенного выше (IMG_20121224_165222.jpg), вместо получения «2012-12-24 16.52.22.jpg« Я получил »2012-12-24 16.NAME:15,2NAME:~17, 2.jpg "(когда я ECHOed переменная, которую я использую, см. Код ниже). Как вы заметили, странное поведение начинается после первого периода (в поле времени), поэтому я попытался заменить его дефисом, как в дате, но все же не-go; Я получаю «2012-12-24 16-NAME: 15,2NAME: ~ 17,2.jpg» сейчас.

Я полностью в недоумении, почему это происходит. Условие if выполняется нормально, только подстроки не расширяются после определенной точки.

Любая помощь будет высоко оценена. Благодаря!

Вот последний код, который я использовал для этой задачи (для вывода списка имен в файл txt для проверки).

@ECHO OFF>NUL 

SETLOCAL ENABLEEXTENSIONS 
SETLOCAL ENABLEDELAYEDEXPANSION 

FOR %%A IN (*.*) DO (
    SET NAME=%%A 
    IF /I "!NAME:~0,3!"=="IMG" (
     ECHO !NAME:~4,4!-!NAME:~8,2!-!NAME:~10,2! !NAME:~13,2!-!NAME:15,2!-!NAME:~17,2!.jpg >> output.txt 
    ) 
) 

PAUSE 

Для тех, кто заинтересован, это содержимое выходного файла:

2012-12-24 16-NAME:15,2NAME:~17,2.jpg 
2012-12-25 17-NAME:15,2NAME:~17,2.jpg 
2012-12-25 17-NAME:15,2NAME:~17,2.jpg 
2012-12-25 19-NAME:15,2NAME:~17,2.jpg 
2012-12-25 21-NAME:15,2NAME:~17,2.jpg 
2012-12-25 21-NAME:15,2NAME:~17,2.jpg 
2012-12-25 21-NAME:15,2NAME:~17,2.jpg 
2012-12-27 18-NAME:15,2NAME:~17,2.jpg 
2012-12-27 22-NAME:15,2NAME:~17,2.jpg 
2012-12-27 22-NAME:15,2NAME:~17,2.jpg 
2012-12-28 00-NAME:15,2NAME:~17,2.jpg 
2012-12-28 00-NAME:15,2NAME:~17,2.jpg 
2012-12-28 02-NAME:15,2NAME:~17,2.jpg 
2012-12-28 03-NAME:15,2NAME:~17,2.jpg 
2012-12-28 03-NAME:15,2NAME:~17,2.jpg 
2012-12-30 08-NAME:15,2NAME:~17,2.jpg 
2012-12-30 08-NAME:15,2NAME:~17,2.jpg 
2012-12-30 08-NAME:15,2NAME:~17,2.jpg 
2012-12-30 08-NAME:15,2NAME:~17,2.jpg 
2012-12-30 08-NAME:15,2NAME:~17,2.jpg 
2012-12-31 03-NAME:15,2NAME:~17,2.jpg 
2012-12-31 03-NAME:15,2NAME:~17,2.jpg 
2012-12-31 03-NAME:15,2NAME:~17,2.jpg 
2012-12-31 03-NAME:15,2NAME:~17,2.jpg 
2012-12-31 21-NAME:15,2NAME:~17,2.jpg 
2012-12-31 21-NAME:15,2NAME:~17,2.jpg 
2012-12-31 21-NAME:15,2NAME:~17,2.jpg 
2012-12-31 21-NAME:15,2NAME:~17,2.jpg 
2012-12-31 21-NAME:15,2NAME:~17,2.jpg 
2013-01-01 14-NAME:15,2NAME:~17,2.jpg 
2013-06-10 09-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 10-NAME:15,2NAME:~17,2.jpg 
2013-06-10 11-NAME:15,2NAME:~17,2.jpg 
2013-06-10 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 
2013-06-12 17-NAME:15,2NAME:~17,2.jpg 

ответ

0
ECHO !NAME:~4,4!-!NAME:~8,2!-!NAME:~10,2! !NAME:~13,2!-!NAME:15,2!-!NAME:~17,2!.jpg >> output.txt 
                  ! ~ missing 
+0

Пора идти спрыгнуть и умереть от стыда. Я чувствую себя так глупо сейчас. Спасибо! По крайней мере, это была не концептуальная проблема. E-он-он. –

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