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

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

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%

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

Спасибо!

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
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}"

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