Самый простой способ создать имя файла с датой и временем в командной строке или пакетном файле

Мне нужно добавить дату/время к некоторым тестовым файлам журнала, созданным несколько раз в день. Некоторые предлагают сделать это так:

set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%

set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%

set SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%

А затем объединить их вместе, но я чувствую, что это просто неправильно. Интересно, есть ли лучший или более краткий способ сделать это? Я предполагаю, что было бы простое решение, потому что потребность довольно распространена.

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
17
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При работе с метками времени вы можете получить дату, как я показываю здесь, в этом демонстрационном файле оболочки (используя bash):

#!/bin/bash

#gets the current timestamp
current_time=$(date "+%Y%m%d-%H%M%S")
echo "Current Time : $current_time"

#crafts the new filename appending $current_time to the original filename
original_filename = "filename.log"
new_fileName=$original_filename.$current_time
echo "New FileName: " "$new_fileName"

#renames the file
#mv $original_filename $new_fileName
Ответ принят как подходящий

Ну, во-первых, форматирование данных/времени — важная вещь в любом языке программирования. Просто взгляните, например, на длинный список методов ToString() в классе C# DateTime, и вы поймете, на что это похоже.

Для вашей конкретной задачи, предполагая, что ваша локальная дата использует «-», а ваше локальное время использует «:» в качестве разделителей (вы можете повторить дату/время для проверки:)

echo %date% %time%

Если вы не привередливы, самый простой способ создать имя файла приведен ниже, и вы можете заменить символы «-» и «:» в соответствии с вашей локалью, что даст вам действительное имя файла в большинстве систем.

echo "testResult_%date:-=%_%time::=%.xml"

"testResult_20220409_ 84841.28.xml"

Если вы хотите, чтобы в вашем именовании были только буквенно-цифровые символы, то, возможно, более чистый набор команд:

set shortTime=%time:~0,8%                     ##eliminate the milliseconds in time string
set shortTime=%shortTime: =0%                 ##replace empty space with zero in morning hours
echo testResult_%date:-=%_%shortTime::=%.xml  ##replace '-' and ':' with nothing

Это должно дать вам что-то вроде

testResult_20220409_084841.xml

Однако, если вам нужно иметь дело с глобализацией приложений, всегда лучше отформатировать дату/время в предопределенный строковый формат, используя что-то вроде PowerShell (в Windows) в качестве первого шага. Это упростит любые последующие манипуляции со строками.

powershell get-date -format "{dd-MM-yyyy_HH:mm:ss}"

Другие вопросы по теме