Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
vavun
9814 / 5197 / 790
Регистрация: 07.04.2013
Сообщений: 15,143
1

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

16.12.2017, 08:49. Просмотров 901. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2017, 08:49
Ответы с готовыми решениями:

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

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

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

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

На диске C создать директорию с именем в виде текущей даты в формате ДД-ММ-ГГГГ, а в ней — текстовый файл
Помогите создать командный файл! 1.Создать в текущем каталоге пользователя...

6
YuS_2
Любознательный
749 / 539 / 175
Регистрация: 10.03.2016
Сообщений: 1,249
16.12.2017, 10:25 2
Лучший ответ Сообщение было отмечено 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
9814 / 5197 / 790
Регистрация: 07.04.2013
Сообщений: 15,143
16.12.2017, 10:41  [ТС] 3
Цитата Сообщение от 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
Любознательный
749 / 539 / 175
Регистрация: 10.03.2016
Сообщений: 1,249
16.12.2017, 11:49 4
Цитата Сообщение от vavun Посмотреть сообщение
Но почему вы говорите, что
Так пользователи, они ведь такие, могут что угодно придумать в качестве разделителей (см.рисунок)
1
Изображения
 
YuS_2
Любознательный
749 / 539 / 175
Регистрация: 10.03.2016
Сообщений: 1,249
16.12.2017, 11:50 5
Цитата Сообщение от vavun Посмотреть сообщение
По сути проблема только с dd/MM/yy
Если других проблем не возникало никогда, тогда проще обычную замену символов использовать.
0
vavun
9814 / 5197 / 790
Регистрация: 07.04.2013
Сообщений: 15,143
16.12.2017, 11:59  [ТС] 6
Цитата Сообщение от YuS_2 Посмотреть сообщение
Так пользователи, они ведь такие, могут что угодно придумать в качестве разделителей
ОК
https://sourceforge.net/projects/unxutils/files/ ( date.exe )
Код
for /f "delims=" %i in ('date.exe +"%d.%m.%Y"') do @echo %~i
Но это ажно цельный файл.

А как из вывода wmic выковырять ?
Он независим от настроек.
Код
WMIC Path Win32_LocalTime Get Day,Month,Year
Добавлено через 1 минуту
Хотя с той же частотой попадаются компы с неработающим wmic
0
YuS_2
Любознательный
749 / 539 / 175
Регистрация: 10.03.2016
Сообщений: 1,249
16.12.2017, 13:22 7
Лучший ответ Сообщение было отмечено 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
16.12.2017, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2017, 13:22

Сравнение даты создания файла с текущей датой
Добрый день! Помогите пожалуйста допилить скрипт: for %%i in ("myfile")...

Вставка текущей даты в строку xml файла
Здравствуйте. Требуется в создаваемый xml файл прописывать текущую дату в тег...

Резервное копирование файла по сети с подстановкой в его имя текущей даты
Есть комп под xp. Задача состоит в том чтобы копировать и переименовать файл с...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru