Как скопировать несколько папок в новый каталог с указанием текущего года и месяца в имени каталога?
У меня есть две папки под названием 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 ответ
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
(target name is dir) параметр xcopy, а также указать имя целевого каталога для использования (в противном случае xcopy поместит содержимое Roads в целевой каталог без создания каталога с именем Roads).
xcopy "C:\Roads" "C:\Roads_backup\%STAMP%\Roads" /I/D/S/H/V/C/F/K
Я не уверен, если вам нужно /D
если вы всегда будете создавать новые каталоги, так как это означает "копировать только новые файлы".