1 (изменено: djrust, 2011-01-16 21:26:27)

Тема: CMD/BAT создание папки со вчерашней датой

хочу создать папку,чтобы она была с датой -1 день
mkdir mkdir D:\backup\%DATE%" так текущая дата создается(06.01.2011),а как чтобы 05.01.2011?

нашел тут вот такое


set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~6,4%
set /a DD=%D% -1
set /a MM=%M%
set /a YY=%Y%
set DT=%DD%.%MM%.%YY%

но выдает 5.1.2011 ,но не 05.01.2011

2

Re: CMD/BAT создание папки со вчерашней датой

djrust, код на форуме оформляется тэгом «code».

Проводить вычисления с датой в пакетных файлах возможно, но сие является весьма нетривиальной задачей. Простого вычитания мало: что будет, если Вы будете вычитать от первого числа месяца? Значит, надо после вычитания корректировать месяц и день. Последний день за предыдущий месяц бывает разными числами, от 28(29 — в високосный год) до 31. А если предыдущий месяц должен получиться декабрь? Надо будет учитывать и это.

Ещё раз повторюсь — в принципе, возможно; реализацию я видел. Но, думаю, проще и понятнее будет, ежели пользовать какую-нибудь внешнюю утилиту, например, ту же «DateX.exe» из комплекта Shell Scripting Toolkit:

@echo off
setlocal

for /f "usebackq" %%i in (
    `"%ProgramFiles%\Shell Scripting Toolkit\DateX.exe" -o -1 -f 'dd.mm.yyyy'`
) do set sFormatDate=%%i

if defined sFormatDate if not exist "D:\backup\%sFormatDate%" md "D:\backup\%sFormatDate%"

endlocal
exit /b 0

3 (изменено: !k, 2011-01-10 00:22:27)

Re: CMD/BAT создание папки со вчерашней датой

CMD + VBS

@echo off
echo WScript.Echo DateAdd("D", WScript.Arguments(0), Now)> "%temp%\dt+.vbs"

call :dayadd -1
md "%$d:/=.%"

del /q "%temp%\dt+.vbs"
goto :eof

:dayadd
for /f %%i in ('cscript //nologo "%temp%\dt+.vbs" %~1') do set "$d=%%i"
goto :eof