1

У меня есть скрипт для копирования файлов из одной папки в другую. Команда XCOPY выглядит так:

 XCOPY /E /Y /V /D:%date% %reportsDataPath% TMP\

Предполагается, что флаг даты должен копировать только файлы с указанной или более поздней датой, но в TMP я вижу, что он копировал файлы, созданные ранее. Однако он не копирует все данные из файлов. Вместо этого он копирует корневой файл и подкаталоги без данных, которые они должны содержать.

Есть ли ошибка в моей команде, которая заставляет его копировать эти файлы?

1 ответ1

3

%date% задает неверный формат для команды, в справке говорится, что ключ /D ожидает формат m-d-y , а echo %date% даст вам Tue 11/26/2013 . Это означает, что вам нужно переформатировать дату, чтобы соответствовать.

Я думаю, что вы можете исправить это с помощью:

@echo off

:GetDate
for /f "skip=1 tokens=1-3" %%a in ('WMIC Path Win32_LocalTime Get Day^,Month^,Year') ^
do (
    set mydate=%%b-%%a-%%c
    goto CopyScript
)

:CopyScript
 xcopy /e /y /v /d:%mydate% %reportsDataPath% TMP\

Обновление № 1

Ради будущих посетителей, я думаю, это обновление даст вам правильный формат даты независимо от региона. Если кто-то из другого региона (за пределами США и использует формат, отличный от mm/dd/yyyy по умолчанию) может это проверить, это было бы здорово.

Обновление № 2

Используя powershell, вы также можете получить это (команды cmd прежнему работают в Powershell, но общая функциональность значительно расширена).

Get-Date -Format MM-dd-yyyy

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .