Форум программистов, компьютерный форум, киберфорум
Наши страницы

Batch (CMD/BAT)

Войти
Регистрация
Восстановить пароль
 
vavun
9898 / 5186 / 788
Регистрация: 07.04.2013
Сообщений: 15,139
#1

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

16.12.2017, 08:49. Просмотров 198. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Добавление текущей даты к имени файла при нестандартном формате вывода даты (CMD/BAT):

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

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

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

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

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

Вставка текущей даты в строку xml файла - CMD/BAT
Здравствуйте. Требуется в создаваемый xml файл прописывать текущую дату в тег <BindDate></BindDate> в формате ГГГГ-ММ-ДД: ...

6
YuS_2
Любознательный
705 / 498 / 163
Регистрация: 10.03.2016
Сообщений: 1,166
16.12.2017, 10:25 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
9898 / 5186 / 788
Регистрация: 07.04.2013
Сообщений: 15,139
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
Любознательный
705 / 498 / 163
Регистрация: 10.03.2016
Сообщений: 1,166
16.12.2017, 11:49 #4
Цитата Сообщение от vavun Посмотреть сообщение
Но почему вы говорите, что
Так пользователи, они ведь такие, могут что угодно придумать в качестве разделителей (см.рисунок)
1
Изображения
 
YuS_2
Любознательный
705 / 498 / 163
Регистрация: 10.03.2016
Сообщений: 1,166
16.12.2017, 11:50 #5
Цитата Сообщение от vavun Посмотреть сообщение
По сути проблема только с dd/MM/yy
Если других проблем не возникало никогда, тогда проще обычную замену символов использовать.
0
vavun
9898 / 5186 / 788
Регистрация: 07.04.2013
Сообщений: 15,139
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
Любознательный
705 / 498 / 163
Регистрация: 10.03.2016
Сообщений: 1,166
16.12.2017, 13:22 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
Привет! Вот еще темы с ответами:

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

Изменить даты и время создания файла, взяв информацию из имени файла - CMD/BAT
Привет! Есть файл "Call@recording@005_20150216113542.mp3" В его имени после "_" идёт дата "20150216" и время "113542" создания файла. Нужен...

Создание файла с именем текущей даты и вывод в него информации о заданной директории - CMD/BAT
Помогите, как разработать пакетный файл для создания файла с именем текущей даты и вывод в него информации о заданной директории?

Копирование файла и переименование копии в имя, составленное из текущей даты и текущего времени - CMD/BAT
копирования файла txt и преименование его.Имя скопированного файла должно быть равном текущей дате и вреени заранее спасибо


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

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

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