Bat добавить к имени файла
вы можете использовать для цикла через каждый каталог и переименовать его так:
Я тестировал это на Windows 7, но он должен работать, по крайней мере, как с Windows XP.
что это делает: для каждого каталога в пути (в скобках) назначьте имя каталога переменной %%f , затем переименуйте каталог %%f на имя в формате, который вы хотите (с вашим именем прилагается). %%f содержит полный путь, который подходит для первый аргумент rename команда, но для второго аргумента нам нужно только расширение filename+, таким образом, модификатор ~nx, добавленный к нашему имени переменной.
кстати, при использовании этого for цикл в командной строке (а не часть пакетного файла) вы хотите использовать только один % вместо %% Для имени переменной. Е. Г. for %f in. вместо выше.
см. следующие ссылки от Microsoft для получения дополнительной информации подробности:
вы можете использовать следующую команду в пакетный файл:-
это команда DOS 'for', которая перебирает заданный набор элементов и для каждого элемента в наборе выполняет заданное действие. Для данного требования необходимо сделать следующее: -
1) принять имя папки, которая содержит подпапки для переименования (в вашем примере это рабочая область).
2) Примите строку, которая будет добавлена к концу(в вашем примере это ваш имя.)
3) перечислите имена подпапок в папке.
4) переименовать, добавив строку к исходному имени.
давайте посмотрим, как это для команды выполняет это. Формат команды " for " используется здесь: -
команда здесь предполагает, что имя и строка родительского каталога, которые необходимо добавить, передаются в качестве параметров командной строки. Они представлены %1 и %2 (первый и второй параметры).
в позвольте нам выдать команду dos для оценки, нам нужно использовать параметр /F. Строка опции: -
- usebackq указывает, что строка backquouted-это команда для оценки.(Обратите внимание, что команда dir заключена в backquotes (`))
- tokens= * означает рассматривать каждую строку как один токен и передавать команде
список каталогов в Родительском каталоге, мы используем команда: -
- / ad отображает только каталоги (игнорирует файлы)
- / b отображает его в голом формате, т. е. возвращаются только имена, а дата, время и другая информация-нет.
- %1-это переменная командной строки, ссылающаяся на родительский каталог.
- %%a-это переменная, которая получает имя подкаталога на каждой итерации. Двойной процентный символ требуется, так как мы используем его в пакетном файле, в противном случае требуется только один (например %a)
наконец, мы указываем действие, которое будет выполнено:-
- %1\%%a создает абсолютный путь к подкаталогу
- %%a%2 Добавьте второй параметр командной строки к исходному имени
для получения дополнительной информации о команде for введите в командной строке следующее: -
для другого примера использования см. петлевые петли: путь DOS
нет необходимости в пакетном файле. Это будет работать из командной строки
Если вы используете пакетный файл, затем %D должны стать %%D
пауза, чтобы увидеть его! Сделать команду cmd и положил его в папку, которую вы хотите переименовать все вложенные папки! Они будут переименовывать в каждое имя папки, плюс WhatEverNameYouLike
Добавление даты в имя файла или папки — несложная задача. Интереснее становится, когда дату нужно записать строго в определённом формате. Из этой статьи вы узнаете, как задавать файлам и каталогам имена с датой в любом виде.
На днях мне пришлось решить небольшую задачку по наименованию резервных копий, наименование которых должно было содержать дату в формате yymmdd (две последних цифры года, две цифры месяца и две цифры дня). Используемая для создания резервных копия утилита, однако, такой формат даты в имени не поддерживает. Но поддерживает запуск исполняемых файлов до и/или после процедуры копирования. Поэтому решением стал cmd-файл (ну или bat, как вариант). Вот его пример:
Конечно, я заменил реальные имена файлов на условные. Теперь разберем что к чему. Сразу оговорюсь, что примеры в основном будут касаться файлов, но логика работы с каталогами точно такая же.
Для перевода дат в именах файлов я использовал значение текущей даты в Windows, которое записывается в виде dd.mm.yyyy. При этом отметим, что эта дата это десять символов (точки считаются), которые пронумерованы системой начиная с нуля.
создаёт переменную CURDATE (от current date) и задаёт ей значение текущей даты. Имя переменной можно выбрать произвольно, хватит и любой буквы. Кроме того, переменную можно специально и не задавать, а использовать текущую дату. Но об этом позднее.
Далее идёт команда переименования ren (или rename ). Можно использовать оба варианта написания команды. Синтаксис её выглядит так:
ren [путь_к_файлу]\[старое_имя_файла] [новое_имя_файла]
Ограничением команды rename является то, что при переименовании нельзя указать новый путь к файлу. То есть это именно переименование, а не копирование с новым именем и не перемещение с переименованием. Но, так как мне нужно было только переименовать файлы, этот вариант подходил. Далее также разберем и другие команды.
Теперь непосредственно о команде переименования:
Как видим, мы берем файл primer_%date%.zip из каталога C:\Backups\ для переименования. Например, созданный сегодня файл будет иметь имя primer_07.11.2018.zip, а завтрашний primer_08.11.2018.zip. В нашем случае это ежедневные резервные копии. Новое имя, возможно, выглядит страшно и требует расшифровки.
%CURDATE:~8,2% — берем два символа из CURDATE , начиная с восьмого;
%CURDATE:~3,2% — берем два символа из CURDATE , начиная с третьего;
%CURDATE:~0,2% — берем два символа из CURDATE , начиная с нулевого.
Напомню, что CURDATE представляет собой последовательность из десяти символов, пронумерованных от нуля до девяти, и в общем виде представляет собой текущую дату в виде dd.mm.yyyy. Таким образом, в нашем примере:
два символа с восьмого — 18;
два символа с третьего — 11;
два символа с нулевого — 07.
В итоге, файл 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 , действуют только на протяжении командной сессии, в которой они были заданы 😉 ).
Здравствуйте. Помогите решить вопрос: нужно вставить перед именем каждого выделенного файла следующий текст:
01_А6(11)_
и так как это я проделываю регулярно хотелось бы добавить эту команду в контектсное меню проводника.
Добавить в начало возможность ввода имени, а после завершения теста добавить имя к выводу
Помогите пожалуйста, нужно добавить в начало возможность ввода имени, а после завершения теста.
Как можно добавить слово к имени всех файлов в папке, перед и после основного имени
Мне нужно поменять имена группы файлов в папке, добавить к ним слово, в начало о конец исходного.
Добавить текст в начало и конец ячеек столбца C
Доброй ночи! Имеется excel файл напечатанного ниже формата: Столбец "A" - артикула; Столбец.
Как добавить свой текст в конец или начало зашифрованного файла?
using System; using System.IO; using System.Security.Cryptography; using System.Text; public.
Решение
Спасибо. Все работает. Даже иконка есть бонусом
Осталось два вопроса можно ли добавить в команду:
1. Не показывать окно КС.
2. Не добавлять текст если в начале имени файла уже есть 01_А6(11)_
khh1, тут есть 3 варианта на убыль качества:
1. Кнопка/хоткей в файлменеджере (Total/Double Commander и нек. др.) скриптом с массовой обработкой.
2. Резидентный AHK-скрипт массовой обработки по горячей клавише с поддержкой выполнения на рабочем столе.
3. То, что запрошено через меню Проводника: многократный запуск комбинации "утилита скрытия + команда".
Тогда лучше оставлю как есть. Все устраивает, еще раз спасибо.
Тему можно закрыть
Решение
khh1, то бишь второй. В таком случае распаковываем архив и выполняем: AutoHotkeyU 32/64 .exe AddTextInFront.ahk (работа по Alt+F2, можно поменять).
FlasherX, Спасибо, то что надо!
Добавлено через 5 минут
FlasherX И последний вопрос если я захочу создать еще одну горячую клавишу, но уже для добавления другого текста в начало файла, нужно будет создавать отдельный .ahk-файл с теми же функциями или можно его добавить в этот код, чтобы не запускать несколько .ahk-файлов?
В процессе работы возник еще один вопрос (не ругайте меня сильно): можно ли сделать так, чтобы при каждом нажатии на горячую клавишу увеличивалось число (+1) в начале файла: нажал "01_А6(11)_", нажал "02_А6(11)_", нажал "03_А6(11)_"
khh1, в последнем варианте функция написана под любой текст. Для других это может привести к ошибке вычисления.
khh1, хех, а чего поняли-то? Если точно знаете, что во всех вариантах будет идти №№_ спереди, то это решаемо. Только непонятно, зачем ограничиваться 01-99 ?
понял, что раньше времени крикнул гоп)
да, они будут только в начале.
Как через командую строку добавить слово в начало и конец имён ряда файлов
Допустим есть файлы 1.bat 2.bat 13.bat 14.bat Нужно добавить перед и после имени слово "den".
Вывести в текстовый файл построчный список имён папок и файлов, добавив в начало каждой строки заданный текст
Здравствуйте есть папка на работе в этой папке есть файлы разные и папки около 100 штук как сделать.
Добавить текст из одних файлов в другие файлы
Здравствуйте, я плох в cmd, но думаю что с помощью cmd это будет сделать легко, так что прошу.
Список выделенных файлов
Здравствуйте. Как можно сделать список выбранных файлов, использую реестр для пункта меню.
Используя приведенный ниже код, я добавляю текст в конец имен файлов:
но он изменился на:
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, если вы используете команду в другом пакетном скрипте.
я сжимаю файлы с помощью WinZip в командной строке. Поскольку мы архивируем ежедневно, я пытаюсь добавить дату и время в эти файлы, чтобы каждый раз автоматически создавался новый.
я использую для создания имени файла. Скопируйте вставьте его в командную строку, и вы увидите имя файла с компонентом даты и времени.
однако, моя проблема AM vs PM. Штамп времени AM дает мне время 9 (с ведущим пробелом) против 10 естественно, занимая два места.
Я думаю, что моя проблема будет распространяться на первые девять дней, первые 9 месяцев и т. д. также.
это немного сложнее, потому что он работает только с полными путями, wmic ожидает, что обратные косые черты будут удвоены и = должен быть спасен (первый. Второй защищен окружающие цитаты).
извлеките час, найдите начальное пространство, если найдено заменить на ноль;
вы должны искать, вы можете просто заменить все пробелы с нуля set hr=%hr: =0% -джеб 11 октября в 14: 16
затем использовать %hr% внутри любой строки форматировании всегда получит двузначное час.
(комментарий Джеба под самым популярным ответом работал лучше всего для меня и является самым простым. Я перепечатываю его здесь, чтобы сделать его более очевидным для будущего пользователи.)
как уже указала Вики, %DATE% и %TIME% верните текущую дату и время, используя короткие форматы даты и времени, которые полностью (бесконечно) настраиваются.
один пользователь может настроить свою систему для возврата Fri040811 08.03 PM в то время как другой пользователь может выбрать 08/04/2011 20:30.
это полный кошмар для программиста BAT.
изменение формата на формат фирмы может устранить проблему, если вы восстановите предыдущий формат до оставляя файл BAT. Но это может быть предметом неприятных условий гонки и усложнить восстановление в отмененных файлах BAT.
к счастью, есть альтернатива.
вместо этого вы можете использовать WMIC. WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table возвращает дату и время неизменным способом. Очень удобно непосредственно анализировать его с помощью .
Итак, собирая кусочки вместе, попробуйте это в качестве отправной точки.
Я нашел лучшее решение для меня, прочитав все ваши ответы:
Если я получу 20160915_ 150101 (с ведущим пространством и временем).
Если PM я получу 20160915_2150101 .
Вы можете добавить ведущие нули к переменной (значение до 99) как это в партии: IF 1%Var% LSS 100 SET Var=0%Var%
поэтому вам нужно разобрать компоненты даты и времени на отдельные переменные, обработать их все так, а затем объединить их вместе, чтобы создать имя файла.
однако, ваш базовый метод для парсинга даты и времени зависит от региональных настроек системы. Если вы рады, что ваш код не переносится на другие машины, это, вероятно, нормально, но если вы ожидайте, что он будет работать в разных международных контекстах, тогда вам понадобится другой подход, например, зачитав параметры реестра:
(этот последний контролирует, есть ли начальный ноль по времени, но не даты, насколько я знаю).
это занимает MB5L.txt и сжимает его до ziptest20120204.zip, если запустить 4 февраля 2012
ваш вопрос, кажется, решен, но .
Я не уверен, что вы принимаете правильное решение для своей проблемы.
Я полагаю, вы пытаетесь сжимать каждый день фактический код проекта.
это возможно с ZIP и 1980 это было хорошее решение, но сегодня вы должны использовать систему репозитория, как subversion или git или . но не zip-архив.
хорошо, возможно, я ошибаюсь.
из ответа выше я сделал готовую к использованию функцию.
проверено с французскими локальными параметрами.
Я понимаю, что это спорный вопрос для ОП, но я только что заварил это, и я немного горжусь собой за то, что мыслил нестандартно.
если вы уже знаете C, с++, Perl, или Руби, затем собирание на awk (который наследует от первых двух и вносит значительный вклад в последние два) - это кусок пресловутого пирога.
команда пакета DOS:
принты:
теперь это не совсем полная история. Я просто буду ленивым и жестко закодирую остальную часть моего имени файла журнала в инструкции printf, потому что это просто. Но если кто-нибудь знает как установите переменную %NOW% в выход AWK (yeilding кишки "универсальной" функции now), тогда я все уши.
EDIT:
быстрый поиск по переполнению стека заполнил этот последний кусок головоломки,пакетный эквивалент bash backticks.
Итак, эти три строки пакета DOS:
Итак, теперь я могу включить datetime в имя файла журнала произведенный моей установкой SQL Server (2005+) скрипт таким образом:
и я снова счастливый турист (за исключением того, что жизнь все еще была намного проще в Unix).
пробел является законным в именах файлов. Если вы поместите свой путь и имя файла в кавычки, он может просто летать. Вот что я использую в пакетном файле:
Решение
да, я заметил в реестре его вручную поправил)
khh1, а как вы его поняли? Вы ответили, что лучше оставите как есть, то бишь только через меню и нужно. Вот я и решил ваш запрос под меню. А про остальное молчок.
Другую тему открывать не надо, т. к. меню относительно гл. задачи коснулись лишь косвенно. Надо выбрать 1 или 2 пункт. И уточнить насчёт Раб. стола.
FlasherX, 1 пункт я так понимаю будет работать через Тотал Командер? Хотелось бы работать в проводнике виндовс. Выполнение на рабочем столе не обязательно, т.к. эти файлы у меня всегда в папках.
Читайте также: