2016-05-13 3 views
0

Я использую оконную ОС, и я скачал видео как урок серии. Я хотел бы заказать эти видео по дате и добавить номер префикса для первого видео как 1, чем 2, 3 ..... Я нашел ответ здесь How to rename and add incrementing number suffix on multiple files in Batch Script? он может добавить номер в имя файла, но может заказывать только имя, а не дату. Спасибо и извините за мой английский.Как добавить порядковый номер префикса числа по дате в нескольких файлах в Batch Script?

+1

С помощью 'dir/O' вы можете просмотреть файлы, отсортированные по дате (см.' Dir /? 'Для параметров); вы можете проанализировать его вывод с помощью цикла 'for/F', установить переменную счетчика и добавить его к именам файлов' ren' ... – aschipfl

ответ

0

Вот простая реализация, что aschipfl предложил в своем комментарии:

@echo off 
setlocal enableDelayedExpansion 
set /a n=0 
for /f "delims=" %%F in ('dir /b /od') do (
    set /a n+=1 
    ren "%%F" "!n!_%%F" 
) 

Но есть две проблемы:

1) Команда FOR/F имеет оконечный символ по умолчанию ; - если имя файла должно начинаться с ;, тогда оно будет пропущено. Простое решение - установить EOL на символ, который не может отображаться в имени файла - : - хороший выбор.

2) Переименование не будет выполнено, если имя файла содержит символ !, потому что замедленное расширение включено, а %%F расширен до задержки расширения. Решение состоит в том, чтобы сохранить имя файла в переменную, а затем переключение с задержкой на расширение и OFF внутри цикла

@echo off 
setlocal disableDelayedExpansion 
set /a n=0 
for /f "eol=: delims=" %%F in ('dir /b /od') do (
    set "file=%%F" 
    set /a n+=1 
    setlocal enableDelayedExpansion 
    ren "!file!" "!n!_!file!" 
    endlocal 
) 

Существует более простой вариант - использовать FINDSTR /N префикс DIR /B /OD выход с номером строки, а затем используйте FOR /F для анализа номера и имени файла. Теперь нет необходимости в переменной счетчика или замедленном расширении.

@echo off 
for /f "delims=: tokens=1*" %%A in ('dir /b /od ^| findstr /n "^"') do ren "%%B" "%%A_%%B" 

Вам даже не нужен пакетный файл. Вы можете использовать следующее непосредственно из командной строки:

for /f "delims=: tokens=1*" %A in ('dir /b /od ^| findstr /n "^"') do ren "%B" "%A_%B"