Файл переименования строки cmd с датой и временем - PullRequest
13 голосов
/ 13 февраля 2011

Проект движется вперед, я понимаю, почему создание .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.

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

Ответы [ 7 ]

14 голосов
/ 17 июля 2012

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%_@_%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
8 голосов
/ 18 сентября 2014

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

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

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

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

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

ren "somefile.txt" "somefile-%date:~10,4%%date:~7,2%%date:~4,2%-%time:~0,2%%time:~3,2%.txt"
5 голосов
/ 11 октября 2011

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

ren somefile.txt  somefile_%time:~0,2%%time:~3,2%-%DATE:/=%.txt
4 голосов
/ 13 сентября 2013

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

    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

3 голосов
/ 04 июня 2013

проблема в %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%

удачи

0 голосов
/ 21 февраля 2017

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

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

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

rename 's/(\w+)(\.\w+)/$1'$(date +"%Y%m%d_%H%M%S)'$2/' *
0 голосов
/ 18 ноября 2016
ls | xargs -I % mv % %_`date +%d%b%Y`

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

...