Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/55: Рейтинг темы: голосов - 55, средняя оценка - 4.56
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660

Добавление текущей даты к имени файла при нестандартном формате вывода даты

16.12.2017, 08:49. Показов 11201. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую !

Давно и успешно используется код, который мне когда-то подсказали тут на форуме

Windows Batch file
1
2
3
4
5
6
7
8
9
set count=1
set "postfix="
:ARNAME
set "archive=%UserDesktop%\BSoD_%DATE%%postfix%.zip"
if exist "%archive%" (
    set "postfix=_(%count%)"
    set /a count+=1
    goto ARNAME
)
Создает имя для будущего файла, а если файл с таким именем существует, то добавляет к имени _(n)
( %UserDesktop% - полный путь к рабочему столу юзера, генерируется заранее )
В 98 % случаев работает корректно.

Проблема:

Иногда у юзеров используется не стандартный формат даты, а именно проблема с форматом вида dd/MM/yy из-за невозможности использовать символ / в именах.
(Настройка влияет не только на %date%, но и на date /t)


Вопрос:
Как можно выводить дату в формате dd.MM.yyyy не зависимо от настроек ?
или
Как "исправить" %date% до помещения в имя будущего файла (замена каждого / в %date% на точку ( ну и - заодно))
или (на крайний случай)
Как (и где ?) взять из системы формат вывода даты и изменить его разово для получения переменной нужного вида и вернуть обратно как было ?

Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2017, 08:49
Ответы с готовыми решениями:

Добавление текущей даты к названию файла
Подскажите пожалуйста, как сделать, чтобы к названию файла добавлялась текущая дата и файл сохранялся как новый, а не перезаписывался. ...

Копирование файла с добавлением текущей даты к имени файла
Просто копирую файл XCOPY D:\BACKUP\base.bak E:\BACKUP\*.* /Y - норм... Мне нужно не заменять файл в месте назначения..., добавить...

Неправильно отображается германский умлаут при выводе текущей даты в германском формате
Доброго времени суток. Подскажите, пожалуйста в чем ошибка. Мне (в целях саморазвития) необходимо, чтобы отображалась дата в немецком...

6
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
16.12.2017, 10:25
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Цитата Сообщение от vavun Посмотреть сообщение
Как можно выводить дату в формате dd.MM.yyyy не зависимо от настроек ?
Дословно, на чистом CMD, не во всех случаях можно определить достоверно используемый формат. Зато можно через powershell, например. Я бы вообще, перевел весь код на него, но если по каким-то соображениям - не вариант, то:
Windows Batch file
1
2
3
4
5
@echo off
set datetmp=
for /f %%i in ('powershell  -executionpolicy bypass "&{get-date -uf '%%d.%%m.%%Y'}"') do set "datetmp=%%~i"
echo %datetmp%
pause&exit /b
Ещё можно попытаться заменить конкретные символы на то, что требуется:
Windows Batch file
1
2
3
4
5
6
7
@echo off
set datetmp=%date%
echo %datetmp%
echo.
set datetmp=%datetmp:/=.%
echo %datetmp%
pause
- но для этого необходимо заранее знать формат вывода. Либо попытаться аналогичным образом прописать замену всех предполагаемых "неблаговидных" символов на те, которые требуются.
2
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
16.12.2017, 10:41  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Я бы вообще, перевел весь код на него
Я бы тож, учитывая, что весь батник 8 КБ, но увы, не вариант =)

Цитата Сообщение от YuS_2 Посмотреть сообщение
Ещё можно попытаться заменить конкретные символы на то, что требуется
Отлично, такой способ подходит. Но почему вы говорите, что
Цитата Сообщение от YuS_2 Посмотреть сообщение
для этого необходимо заранее знать формат вывода
?

Например:
Windows Batch file
1
2
3
4
5
6
7
8
set datetmp=%date%
echo %datetmp%
echo.
set datetmp=%datetmp:/=.%
echo %datetmp%
echo.
set datetmp=%datetmp:-=.%
echo %datetmp%
Не красиво, но делает то, что нужно для dd/MM/yy и yyyy-MM-dd. Остальные форматы "с точками" менять не обязательно в моем случае. По сути проблема только с dd/MM/yy
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
16.12.2017, 11:49
Цитата Сообщение от vavun Посмотреть сообщение
Но почему вы говорите, что
Так пользователи, они ведь такие, могут что угодно придумать в качестве разделителей (см.рисунок)
Изображения
 
1
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
16.12.2017, 11:50
Цитата Сообщение от vavun Посмотреть сообщение
По сути проблема только с dd/MM/yy
Если других проблем не возникало никогда, тогда проще обычную замену символов использовать.
0
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660
16.12.2017, 11:59  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Так пользователи, они ведь такие, могут что угодно придумать в качестве разделителей
ОК
https://sourceforge.net/projects/unxutils/files/ ( date.exe )
Code
1
for /f "delims=" %i in ('date.exe +"%d.%m.%Y"') do @echo %~i
Но это ажно цельный файл.

А как из вывода wmic выковырять ?
Он независим от настроек.
Code
1
WMIC Path Win32_LocalTime Get Day,Month,Year
Добавлено через 1 минуту
Хотя с той же частотой попадаются компы с неработающим wmic
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
16.12.2017, 13:22
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Цитата Сообщение от vavun Посмотреть сообщение
А как из вывода wmic выковырять ?
Как-то так:
Windows Batch file
1
2
3
4
@echo off
for /f %%a in ('wmic path win32_LocalTime get * /value') do >nul set "%%a"
echo %Day%.%Month%.%Year%
pause
там есть ещё переменные по дате-времени, просто выводить их не стал...
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2017, 13:22
Помогаю со студенческими работами здесь

Добавление к имени файла даты его последнего изменения
Ребят помогите пожалуйста нужно перед запуском процесса test.exe переименовывать файл chatlog.txt который в папке D:/test/ на...

Получение даты и времени в формате текущей локализации
SimpleDateFormat LocaleDateFormat = new SimpleDateFormat(); В этом случае с русской локалью дата и время отображается так: 12.03.13...

Создать подпапки с именем текущей даты в формате ГГГГ-ММ-ДД
Добрый день. Уважаемые гуру! Прошу помочь решить задачку. Есть конкретная папка на сетевом диске, например Root Внутри папки Root...

Добавление текущей даты в listView
Добрый вечер. Прошу простить за такой вопрос, но сколько не искал, нахожу не то... Задача следующая есть есть listView с двумя...

добавление текущей даты в combo!
Друзья я заранее извиняюсь за вопрос посколько многим он покажется весьма глупым, но: как в combo вставить текущую дату "dd mm...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru