Bat добавить к имени файла

Обновлено: 07.07.2024

Используя приведенный ниже код, я добавляю текст в конец имен файлов:

но он изменился на:

3 ответа 3

Вы можете добавить текст в конец любого имени файла (до первой точки, которая обычно является началом расширения), используя последовательность символов ? это по крайней мере столько, сколько оригинальное имя.

? жадно совпадает и сохраняет любой символ, кроме . и может ничего не совпадать, если в нем нет символов. Ваш текст затем добавляется, а затем .* Соответствует и сохраняет точку и оставшуюся часть имени.

Вы можете изменить исходную маску файла так, как считаете нужным, чтобы соответствовать любым файлам, которые вы хотите. Исходная маска полностью независима от маски переименования.

Если некоторые из ваших файлов содержат более одного . в имени, тогда вы не можете использовать одну простую команду REN. Одним из вариантов является использование пакетного сценария:

Обратите внимание, что важно использовать FOR /F, а не простой FOR. FOR /F собирает весь результат команды DIR перед началом итерации, тогда как простой FOR начинает выполнять итерацию после заполнения внутреннего буфера, что повышает риск переименования одного и того же файла несколько раз.

Я использую EOL=: для защиты от удаленной возможности, с которой начинается имя файла ; , EOL по умолчанию является ; , который игнорирует строки, начинающиеся с ; , Имена файлов не могут содержать : поэтому для параметра EOL это безопасный символ.

Один небольшой недостаток FOR /F с DIR /B - это то, что он не сохраняет информацию о пути, поэтому я использовал PUSHD в начале. Без PUSHD вы могли бы включить информацию о пути в команду DIR, но тогда вам также нужно будет включить путь в маску источника REN. Следующая строка работает в командной строке (без пакетного скрипта):

Альтернативой является использование команды FINDSTR для вывода списка файлов, который удобно сохраняет информацию о пути:

Поскольку каждый указанный файл начинается с буквы диска, можно использовать EOL=; по умолчанию ; ,

Последний вариант - вы можете использовать мою утилиту переименования регулярных выражений JREN.BAT. Это чистый скрипт (гибридный JScript/batch), который работает на любом компьютере с Windows начиная с XP.

Поскольку JREN является пакетным скриптом, вам нужно будет использовать CALL JREN, если вы используете команду в другом пакетном скрипте.

На днях мне пришлось решить небольшую задачку по наименованию резервных копий, наименование которых должно было содержать дату в формате yymmdd (две последних цифры года, две цифры месяца и две цифры дня). Используемая для создания резервных копия утилита, однако, такой формат даты в имени не поддерживает. Но поддерживает запуск исполняемых файлов до и/или после процедуры копирования. Поэтому решением стал cmd-файл (ну или bat, как вариант). Вот его пример:

Конечно, я заменил реальные имена файлов на условные. Теперь разберем что к чему. Сразу оговорюсь, что примеры в основном будут касаться файлов, но логика работы с каталогами точно такая же.

Для перевода дат в именах файлов я использовал значение текущей даты в Windows, которое записывается в виде dd.mm.yyyy. При этом отметим, что эта дата это десять символов (точки считаются), которые пронумерованы системой начиная с нуля.

Добавление даты в любом формате в имя файла или папки через cmd

Добавление даты в любом формате в имя файла или папки через cmd

создаёт переменную CURDATE (от current date) и задаёт ей значение текущей даты. Имя переменной можно выбрать произвольно, хватит и любой буквы. Кроме того, переменную можно специально и не задавать, а использовать текущую дату. Но об этом позднее.

Далее идёт команда переименования ren (или rename ). Можно использовать оба варианта написания команды. Синтаксис её выглядит так:

ren [путь_к_файлу]\[старое_имя_файла] [новое_имя_файла]

Ограничением команды rename является то, что при переименовании нельзя указать новый путь к файлу. То есть это именно переименование, а не копирование с новым именем и не перемещение с переименованием. Но, так как мне нужно было только переименовать файлы, этот вариант подходил. Далее также разберем и другие команды.

Теперь непосредственно о команде переименования:

Как видим, мы берем файл primer_%date%.zip из каталога C:\Backups\ для переименования. Например, созданный сегодня файл будет иметь имя primer_07.11.2018.zip, а завтрашний primer_08.11.2018.zip. В нашем случае это ежедневные резервные копии. Новое имя, возможно, выглядит страшно и требует расшифровки.

Напомню, что CURDATE представляет собой последовательность из десяти символов, пронумерованных от нуля до девяти, и в общем виде представляет собой текущую дату в виде dd.mm.yyyy. Таким образом, в нашем примере:

В итоге, файл primer_07.11.2018.zip превращается в d_181107_primer.zip. Что касается буквы d, то это просто указатель ежедневной копии, который я оставил в примере, чтобы показать, что можно спокойно дописывать любые символы до и после формируемой нами даты.

В конце скрипта очистим значение CURDATE

Переменную можно было и не задавать. Тогда бы мы обошлись одной строкой:

С другой стороны, если Вам не чуждо написание сложных команд, то лучше сразу заиметь привычку оперировать собственными переменными.

Как я уже говорил, вы можете записывать дату в имени файла по своему усмотрению не только при переименовании. Например, команда для создания каталога mkdir (или md ):

Здесь мы обозвали переменную не CURDATE , а просто a . Второй командой мы создали на диске C каталог с именем вида mmdd (месяц, день).

Переименование можно делать и командой move .

Этими командами мы переименовали файл primer.txt в текущем каталоге в файл primer_07_11_2018.txt (при другой дате на календаре, конечно, будет другое имя). Думаю, синтаксис уже должен быть вам понятен: два символа с нулевого, два символа с третьего и четыре с шестого.

Но, вообще, команда move это, конечно, больше про перемещение файлов и папок. Конечно же, задавать имена с датой в любом формате можно и при перемещении.

Кстати, в самом первом примере мы находили нужным нам файл с датой в имени, которая была записана в правильной по российским нормам последовательности dd.mm.yyyy, но ведь она может быть записана и другим способом. Что если в имени файла у нас только месяц и последние две цифры года? А мы хотим поставить сначала год, потом месяц, да ещё и разделить их символом _ для лучшей читаемости.

Как и в команде move , если путь к файлу или каталогу не задан явно, речь идёт о текущем каталоге. Ну и не забывайте очищать значение переменной (на самом деле, переменные, задаваемые командой set , действуют только на протяжении командной сессии, в которой они были заданы 😉 ).

Создадим в текстовом редакторе файл с именем retime.bat со следующим содержанием и разместим его, например, в корне диска С:

echo off
set file=%1
If Exist %file% For %%i In (%file%) Do SET psth=%%

pi
If Exist %file% For %%i In (%file%) Do SET TIMESTAMP=%%

ti
If Exist %file% For %%i In (%file%) Do SET nn=%%

ni
If Exist %file% For %%i In (%file%) Do SET xx=%%

setlocal enabledelayedexpansion
for /f «tokens=1 delims='.'» %%i in ('echo %TIMESTAMP%') do set dd=%%i
for /f «tokens=2 delims='.'» %%i in ('echo %TIMESTAMP%') do set mm=%%i
for /f «tokens=3 delims='.'» %%i in ('echo %TIMESTAMP%') do set yy=%%i
for /f «tokens=1» %%i in ('echo %yy%') do set yy=%%i
rename %file% "%nn%_%yy%%mm%%dd%%xx%"

В двух словах: разбираем информацию о файле на имя (nn), расширение (xx) и время его создания (TIMESTAMP); парсим время создания, выделяя год (yy), месяц (mm) и день (dd) и собираем новое название. Например, у нас был project1.zip, созданный 14 марта 2014 года, после переименования получаем project1_20140314.zip. Дата сделана «с заду наперед» для правильной сортировки по имени файла – файлы выстроятся в соответствии с датой создания. Хотите по-другому – измените строку, начинающуюся с rename.

Теперь сделаем запуск нашего bat файла из контекстного меню. Для этого опять же в текстовом редакторе создаем файл reg_retime.reg с таким содержимым:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Retime\Command]
@="\«C:\\retime.bat\» \"%1\""

Обратите внимание – Retime – так будет выглядеть команда в контекстном меню. Так же мы указываем путь к нашему bat файлу. Щелкаем по созданному файлу и соглашаемся добавить данные в реестр. Готово!

Проверяем: берем файл — подопытного кролика, щелкаем по нему правой кнопкой мыши и выбираем в открывшемся контекстном меню пункт Retime. К имени подопытного кролика добавится дата его создания.

Как переименовать файлы все сразу [Bulk Rename Utility]

Недавно, мне понадобилось убрать из имени нескольких десятков файлов определённую часть. Переименовать файлы по одному – значит убить на этом целый ворох времени и сил. И я решил найти программу, которая сможет переименовать все файлы сразу. И я нашёл такую программу, которая к тому же бесплатная. Называется это чудо программистской мысли Bulk Rename Utility.

Групповое изменение названия файлов.

Переименовывать несколько файлов сразу можно и встроенными инструментами Windows. Например с помощью командной строки или bat файла. Но. Для этого нужно владеть языком программирования Batch. Думаю, что далеко не каждый пользователь компьютера его знает. С помощью указанной программы сделать это на много легче. Batch является языком программирования, который используется для создания сценариев, выполняемых в Windows. Как правило эти файлы имеют расширение *.bat или *.cmd.

Как переименовать файлы все сразу?

Bulk Rename Utility. Инструкция на русском.

интерфейс программы Bulk Rename Utility

Программа умеет очень многое. Рассказать подробно про каждую функцию будет очень долго и много. Поэтому для начала приведу здесь скриншот основного интерфейсного окна, который и открывается при запуске программы, а потом кратко пройдусь по функциям.
В этом окне воедино собраны все возможности программы и поначалу кажется что сам черт сломает здесь ногу. Но через пару минут уже приходит понимание того, что чему служит (тем более с переводом и инструкцией). Теперь кратко пройдёмся по некоторым функциям данного окна, которые на мой субъективный взгляд наиболее часто могут использоваться пользователями. А всего функций (именно работы с переименовыванием файлов) у программы 14.

Программа умеет работать как с файлами так и с папками.

  1. [RegEx]. С помощью этой функции можно менять имя файла в названии которого есть определённый символ. Например: можно найти файлы в которых есть цифра 2 и поменять всем таким файлам имя на новое. Искомый символ вводится в поле Match, а новое имя в поле Replace.
  2. [Name]. Здесь можно сразу всем файлам поменять наименование либо вообще удалить его. Данная функция имеет параметры, которые можно выбирать. Fixed фиксирует новое имя, Removed соответственно удаляет. Reverse переписывает имя наоборот, как в арабской письменности.
  3. [Replace]. Данная функция позволяет менять определённые символы (в том числе буквы и цифры) в имени файла на свои другие. В поле Replace указываем символ, который нужно сменить, а в поле With символ, который заменит старый. Таким образом можно и полностью название сменить на своё.
  4. [Case]. Данная опция даёт возможность сменить регистр букв в названиях файлов. Имеет 5 режимов:
    • Same — используется во взаимодействии с полем Excep., куда вписываются буквы. Этот режим позволяет сменить регистр букв в названиях файлов на тот, который вы указали в поле ввода, если такая буква есть в именах файлов. Например: Если в поле ввода вы вели маленькую букву "а", то в именах файлов, если есть большие буквы "А", программа переведёт их в маленькие.
    • Lower — переводит все буквы в именах файлов в нижний регистр (делает их маленькими).
    • Upper — переводит все буквы в названиях файлов в верхний регистр (делает их большими).
    • Title — первую букву в словах переводит в верхний регистр.
    • Sentence — переводит только первую букву в имени файла в верхний регистр.
  5. [Remove]. Удаляет из имени файлов определённые символы, буквы.
    • First n - тут можно цифрой указать какую букву по счёту от начала имени можно удалить.
    • Last n — тут можно указать какую букву по счёту от конца имени нужно удалить.
    • From и To — указывается цифрами с какой по какую буквы удалить.
    • Поле Chars позволяет убрать из названий файлов определённые символы, которые вы укажете (например пробел).
    • Поле Words позволяет удалить из названий файлов целые слова, которые вы укажете.
    • Digits — удаляет все цифры из названий файлов.
    • D/S — убирает из имени файла лишние пробелы (если их 2 и более)
    • Sym. — очищает все символы из имени файлов.
    • Accents — удаляет точки (акценты) над Ё, Й и тому подобных букв.
  6. [Move/Copy Parts] копирует заданную букву имени файла и обрамляет её в указанный вами символ (букву) в поле Sep.. Также может поменять местами символы в наименовании файла (по другому не знаю как объяснить 🙂 ).
  7. [Add] — добавляет в имя файла символы, буквы, слова. Поле Prefix добавляет перед именем, а Suffix после имени. Поле Insert в купе с at pos. (at pos - указание позиции) добавляет слова внутри названия файла на определённой позиции. Опция Word Space добавляет между словами в имени файла 1 пробел, если его совсем нет.
  8. [Auto day] и [Numbering] — позволяют автоматически добавлять к имени файла дату (дату создания, изменения, текущую дату, свою произвольную дату с помощью поля Custom и т.д.) и порядковый номер файла (можно добавлять перед, либо внутри имени, либо в конце).
  9. [Append Folder Name] — добавляет к имени файла, название папки в котором этот файл хранится. При этом можно задавать уровень вложенности папок, то есть можно указать весь путь до папки (имена всех директорий).
  10. [Special] — в этой функции очень полезным является возможность изменять атрибуты файлов. Для этого нужно установить галочку в пункт Change File Attributes. Можно установить 4 атрибута.
    1. Read Only - только для чтения.
    2. Archived - Архивный.
    3. System - Системный.
    4. Hidden - Скрытый.

    Читайте также: