CMD ужасен при датах
Для чего бы то ни было любой сложности, я бы не стал использовать %DATE%
и %TIME%
, чтобы не изобретать велосипед заново.PowerShell входит в стандартную комплектацию (хотя и с разными версиями) на каждой платформе Windows, выпущенной за последние 10 лет, и использует достаточно полнофункциональную библиотеку даты / времени.
FOR /F "usebackq" %%d IN (`PowerShell -NoProfile -ExecutionPolicy Bypass -Command "Get-Date -UFormat '%%Y%%m'" ^<NUL`) DO SET "STAMP=%%~d"
В результате для envvar STAMP
будет установлено значениеформатированная строка даты, управляемая параметром -UFormat
.Неважно, какой язык или язык компьютера, и он будет работать на чем угодно с PowerShell ( стандарт на Win7 и более поздних версиях).
Это немного многословно, но вытакже можно легко скопировать / вставить его без необходимости пересчитывать все смещения строк, необходимые для разделения значений в %DATE%
и %TIME%
каждый раз, когда вы хотите отформатировать текущую дату.
Вы также можете сделать то же самоевещь с датами, отличными от текущей, а также вычитание временных интервалов из текущей даты, чтобы получить такие вещи, как «неделю назад» - что-то мучительно болезненное делать только с чистыми пакетными / CMD.
Копирование каталогов
Возможно, вы захотите использовать параметр /I
(целевое имя является каталогом) xcopy, а также указать имя целевого каталога для использования (в противном случае xcopy поместит содержимое из Дороги в целевой каталог без создания каталога с именем Дороги ).
xcopy "C:\Roads" "C:\Roads_backup\%STAMP%\Roads" /I/D/S/H/V/C/F/K
Я не уверен, если вам нужен /D
, если вы всегдагсоздание новых папок, так как это означает «копировать только новые файлы».