2013-09-23 2 views
0

Как получить вчера формат даты в пакетном файле?Пакетный файл: Получить вчерашнюю дату в формате: M_d_yyyy

Я хотел бы, чтобы выглядеть так: M_d_yyyy

Обратите внимание, что если есть один день цифры и месяц, я хотел бы, чтобы это было одной цифрой.

Пример: 8_5_2013 является August 5th, 2013.

Я огляделся по сторонам на несколько дней, но не смог найти решение. Любое руководство очень ценится.

+0

Возможный дубликат [Дата последнего дня в пакетном файле] (http://stackoverflow.com/questions/5017701/yesterdays-date-in-batch-file) – Endoro

+2

Stack Overflow - это вопрос и ответ для профессиональных и энтузиастов-программистов , Вопросы должны ** демонстрировать минимальное понимание решаемой проблемы **.Расскажите, что вы пытались сделать, почему это не сработало, и как это работает. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist). – Endoro

+0

Мне нужно было получить вчерашнюю дату, для примера «Yesterdays Date in Batch File» требуется 2 страницы вставленного кода. Я хотел что-то короткое и простое, и решение Майка было именно таким. Я никогда не слышал об UnxUtils, пока Майк не упомянул об этом, он только открыл дверь с множеством возможностей с этой коллекцией. Я искал в течение нескольких дней для решения и только задал вопрос в качестве крайней меры. Я уже нашел предложенный ответ давно, он не решил мою конкретную проблему. – sojim

ответ

1

Я думаю, вы должны получить date.exe от UnxUtils.

date.exe --date="1 day ago" "+%-m_%d_%Y"

Скачать: http://sourceforge.net/projects/unxutils/files/unxutils/current/
Man страница: http://www.ss64.com/bash/date.html


@echo off 
setlocal 
set magic="c:\unx\usr\local\wbin\date.exe" --date="1 day ago" "+%%-m_%%d_%%Y" 
for /f %%i in ('%magic%') do set yesterdate=%%i 
echo yesterdate = %yesterdate% 

Если вы хотите сделать это только с пакетного языка, вы будете в конечном итоге с почти 100 lines of incomprehensible batch code , UPDATE: или используйте гибридное решение dbenham's series/JScript, размещенное в ответе ниже, в котором, по крайней мере, используются прочные Windows API.


Смотрите также: How to get current datetime on Windows command line, in a suitable format for using in a filename?

+0

Я попытался установить его как переменную: 'set yesterdate = E: \ Progra ~ 2 \ UnxUtils \ usr \ local \ wbin \ date.exe --date =" 1 день назад "" +% - m_% e_% Y " echo% yesterdate%' Но это просто вывод команды. Любая идея почему? – sojim

+0

Поскольку вы не можете использовать такой набор, чтобы просто захватить вывод команды. Языковой пакет тупой. Я обновил свой ответ. –

+0

Мне нужно узнать, что для команды «usebackq» .. вот почему я люблю Linux lol .. windows environment - OBTUSE! – sojim

3

Ничего плохого с бесплатным 3-сторонних исполняемых файлов, но некоторые из нас не имеет права использовать их на наших рабочих машин.

Я написал мощный hybrid JScript/batch utility called getTimestamp.bat, который может выполнять почти любые вычисления даты и времени на компьютере с Windows.

Существует множество опций для указания базовой даты и времени, множество вариантов добавления положительных или отрицательных смещений к дате и времени, множество параметров форматирования результата и возможность захвата результата в переменной. Оба входа и выхода могут быть непосредственно выражены как местное время, UTC или любой часовой пояс по вашему выбору. Полная документация встроена в скрипт.

Утилита представляет собой чистый скрипт, который будет запускаться на любой современной машине Windows с XP вперёд - не требуется исполняемый файл третьей стороны.

Предполагая getTimestamp.bat находится в текущем каталоге, или еще лучше, где-то в вашем PATH, то следующий простой вызов будет определять dt переменную, содержащую вчерашнюю дату в формате M_D_YYYY:

call getTimestamp -od -1 -f {m}_{d}_{yyyy} -r dt 

Примечание: когда я ставлю дата в имени файла, мне нравится использовать формат YYYY_MM_DD, потому что этот формат будет сортировать хронологически при получении списка каталогов.

+0

Дэйв, может ли он решить вопрос ОП с использованием имени месяца и дня с 1-й/2-й/3-й/4-й номенклатурой? Конечно, какой-то простой код может изменить название месяца. – foxidrive

+0

@foxidrive - Утилита уже поддерживает месячные имена, но ее нужно будет изменить для поддержки вывода порядкового номера. Однако ответ как есть дает желаемый результат OP, о чем свидетельствует принятый ответ. OP хочет '8_5_2013'. «5 августа 2013 года» - это просто понять, как интерпретировать числовую строку. – dbenham

+0

О! Я полностью пропустил этот последний пункт. К сожалению. :) – foxidrive

Смежные вопросы