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.

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

Ответ 1

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

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%[email protected]_%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%[email protected]_%time:~1,1%h%time:~3,2%m%time:~6,2%s%.txt

Я всегда называю год первым YYYYMMDD, но хотел добавить время. Здесь вы увидите, что он дал причину, по которой 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

Ответ 2

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

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt

Ответ 3

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

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

Простейшим решением является простое окружение желаемого имени файла в кавычках "filename".

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

Я бы предложил обратный порядок даты YYYYMMDD-HHMM:

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

Ответ 4

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

    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

Ответ 5

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

обойти с помощью:

set HR=%time:~0,2%

set HR=%Hr: =0% (replace space with 0 if any <has a space in between : =0>)

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

удача

Ответ 6

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

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

Ответ 7

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

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

Я обнаружил, что:

rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' *