Как скопировать несколько папок в новый каталог с указанием текущего года и месяца в имени каталога? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть две папки с именами Roads и Kerbs.Я хочу скопировать обе папки (сохраняя имя папки) в папку резервной копии с именем папки в текущем году / месяце.

Пример: имя папки резервной копии будет 201812, и если я открою ее,две папки Roads и Kerbs будут находиться под ним.Я хочу создать командный файл с xcopy, чтобы выполнить эту функцию для меня.

Текущий код открывает только папку с именем 01 и копирует только содержимое папки.Мне нужен месяц / год, а затем две папки под ним с их содержимым.

@echo off
set curr_date=%DATE:~10,2%-%DATE:~7,2%
mkdir "C:\Roads_backup\%curr_date%"
xcopy "C:\Roads" "C:\Roads_backup\%curr_date%" /D/S/H/V/C/F/K

Как скопировать две папки в новый каталог с указанием текущего года и месяца в имени каталога?

1 Ответ

0 голосов
/ 21 декабря 2018

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, если вы всегдагсоздание новых папок, так как это означает «копировать только новые файлы».

...