строка cmd переименовать файл с датой и временем

Проект продвигается вперед, и я понимаю, почему создание файлов .bat для выполнения задач может вызвать привыкание! Теперь я могу сохранять файл somefile.txt через равные промежутки времени, а затем переименовывать файл somefile.txt, добавляя время и дату, чтобы создать уникальное имя файла.

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~3,2%%date:~-4,4%.txt

Например, приведенный выше код только что переименовал somefile.txt в somefile_1317_13022011.txt (1317hrs on 13th February 2011).

я побежал

ren somefile.txt somefile_%time:~0,2%%time:~3,2%-%date:~-10,2%%date:~7,2%%date:~-4,4%.txt 

вчера он успешно работал до полуночи, а затем произошел сбой (синтаксическая ошибка), хотя он сохранялся как 12012011 для даты (12 января 2011 г.) вместо правильной даты 12022011.

Будет ли текущая версия работать после полуночи? Я путаю себя с форматом даты Великобритании и США?


person user611620    schedule 13.02.2011    source источник
comment
Это продолжение предыдущего вопроса? Если да, то вам нужно сделать этот вопрос самостоятельным и самодостаточным. В настоящее время кажется, что все это имеет мало смысла. :)   -  person bzlm    schedule 13.02.2011
comment
Все ответы здесь пытаются обойти машинно-недружественный (не буду здесь спорить о человеко-дружественности) американский 12-часовой формат времени, несмотря на зависимость от локали в целом. Как насчет использования независимого от локали источника времени с 24-часовым форматом? См. stackoverflow.com/questions/203090/   -  person Martin Prikryl    schedule 21.07.2014


Ответы (7)


Анимусон дает достойный способ сделать это, но не помогает понять его. Я продолжал искать и наткнулся на ветку форума. с помощью этих команд:

Echo Off
IF Not EXIST n:\dbfs\doekasp.txt GOTO DoNothing

copy n:\dbfs\doekasp.txt n:\history\doekasp.txt

Rem rename command is done twice (2) to allow for 1 or 2 digit hour,
Rem If before 10am (1digit) hour Rename starting at location (0) for (2) chars,
Rem will error out, as location (0) will have a space
Rem and space is invalid character for file name,
Rem so second remame will be used.
Rem
Rem if equal 10am or later (2 digit hour) then first remame will work and second will not
Rem as doekasp.txt will not be found (remamed)


ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~0,2%h%time:~3,2%m%time:~6,2%s%.txt
ren n:\history\doekasp.txt doekasp-%date:~4,2%-%date:~7,2%-%date:~10,4%_@_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt

Я всегда сначала называю год ГГГГММДД, но хотел добавить время. Здесь вы увидите, что он указал причину, по которой 0,2 не будет работать, а 1,1 будет, потому что (пробел) — недопустимый символ. Это открыло мне глаза на проблему. Кроме того, по умолчанию вы находитесь в 24-часовом режиме.

Я закончил с:

ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%.txt
ren Logs.txt Logs-%date:~10,4%%date:~7,2%%date:~4,2%_%time:~1,1%%time:~3,2%.txt

Выход:

Logs-20121707_1019
person silentpete    schedule 17.07.2012
comment
Вместо того, чтобы полагаться на неудачное переименование, я обнаружил, что вы можете получить метку времени, а затем заменить возможный пробел на 0: set logtime=%time:~0,2%%time:~3,2% set логтайм=%логтайм: =0% - person Rassi; 25.02.2013
comment
Всегда не рекомендуется использовать хаки (ремонтопригодность и простота понимания всегда должны быть золотым правилом номер 1 для любой работы). Большинство приведенных ниже решений чище, чем это (хотя вы используете лучший формат времени IMHO). - person SeeMoreGain; 18.09.2014

Копаю старую ветку, потому что все решения пропустили самое простое исправление...

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

Самое простое решение — просто заключить желаемое имя файла в кавычки "filename".

Затем у вас может быть любой шаблон даты, который вы хотите (за исключением таких недопустимых символов, как /,\,...)

Я бы предложил обратный порядок даты ГГГГММДД-ЧЧММ:

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
person SeeMoreGain    schedule 18.09.2014
comment
Кажется, ваш файл отображается как ГГГГДДММ-ЧЧММ (дата и месяц меняются местами). - person Sun; 23.04.2015
comment
@ sunk818 Это может быть проблема с локалью. %date использует формат даты на вашем компьютере. Все ответы здесь предполагают формат даты ДД/ММ/ГГГГ, а не ММ/ДД/ГГГГ. Если вам нужен независимый от локали способ сделать это, решение немного сложнее — вы должны использовать результаты команды wmic os get localdatetime. Пример этого можно увидеть в ссылке. - person SeeMoreGain; 01.05.2015
comment
Спасибо, это объясняет. Я грязный, а ты тупица. - person Sun; 01.05.2015

следующее должно быть вашим правильным решением

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt
person Raj Gohil    schedule 11.10.2011
comment
Результат будет somefile_1717-2019-04-15.txt (часы-минуты-год-месяц-день). - person deadfish; 15.04.2019

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

    set HR=%time:~0,2%
    set HR=%Hr: =0% 
    set HR=%HR: =%
    rename c:\ops\logs\copyinvoices.log copyinvoices_results_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%.log 

Это дало мне нужный мне формат: copyinvoices_results_2013-09-13_0845.log

person Roger    schedule 13.09.2013
comment
Это не удастся, если на вашем компьютере время не отформатировано как месяц/день/год, то есть если вы не в США. - person neves; 02.03.2016

проблема в %time:~0,2% не может установить 24-часовой формат, заканчивается пробелом (1-9) вместо 0 (1-9)

ходить с:

установить HR=%time:~0,2%

установить HR=%Hr: =0% (replace space with 0 if any <has a space in between : =0>)

затем замените %time:~0,2% на %HR%

удачи

person James Chong    schedule 04.06.2013

ls | xargs -I % mv % %_`date +%d%b%Y`

Достаточно одной строки. ls все файлы/каталоги в текущем каталоге и добавить дату к каждому файлу.

person Jim.Y    schedule 18.11.2016
comment
Это недопустимый синтаксис cmd. - person melpomene; 21.02.2017

Я попытался сделать то же самое:

<fileName>.<ext> --> <fileName>_<date>_<time>.<ext> 

Я нашел это :

rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' *
person mnennon    schedule 21.02.2017
comment
Это недопустимый синтаксис cmd. - person melpomene; 21.02.2017
comment
совершенно верно .. я не видел, что вопрос был о cmd .. удалю свой ответ - person mnennon; 21.02.2017