PDA

Показать полную графическую версию : как изменить формат даты в xcopy


shugurui
22-10-2015, 11:35
Доброго времени суток!

Пишу скрипт для автоматического бэкапирования, а точнее для его инкрементальных копий и столкнулся с такой проблемой:

xcopy c:\1 \\remotepc\backup /e/f/v/d:%date% >> c:\log\ilog.txt

и вот в чем собственно проблема...
Starts 11:30:49,18, 22.10.2015
Недопустимый параметр: /d:22.10.2015
Stop 11:30:49,24

т.к. программа американская, то формат даты там MM-dd-yyy, а если использовать %date% то получается конфликт т.к. формат даты на сервере установлен локальный dd-MM-yyyy
З.Ы. формат даты поменять не могу т.к. там крутится база.

Если оставить лишь ключ /d без даты, как описано в документации, то вообщем-то должна подтягиваться текущая дата автоматически, но вопреки описанию копируются абсолютно все файлы...

Elven
22-10-2015, 11:58
set tdate=%DATE:~0,2%-%DATE:~3,2%-%DATE:~6,4%
xcopy c:\1 \\remotepc\backup /e/f/v/d:%tdate% >> c:\log\ilog.txt

Graf_de_Sivale
22-10-2015, 12:01
формат даты зависит от установки COUNTRY

Foreigner
22-10-2015, 12:02
shugurui, Недопустимый параметр: /d:22.10.2015 »
Ни о чем не намекает?

xcopy /? | findstr "\/D:"
/D:м-д-г Копирует файлы, измененные не ранее указанной даты.

Измените:

for /f "tokens=1-3 delims=." %%i in ("%date%") do set "d=%%j-%%i-%%k"
xcopy c:\1 \\remotepc\backup /e/f/v/d:%d% >> c:\log\ilog.txt

shugurui
22-10-2015, 12:25
Ниочем не намекает?
Код:
xcopy /? | findstr "\/D:"
/D:м-д-г Копирует файлы, измененные не ранее указанной даты. »
Говорит, по этому и спрашиваю, как можно это сделать так, чтоб это было автоматически, а не каждый раз добавлять дату вручную.

Код:
set tdate=%DATE:~0,2%-%DATE:~3,2%-%DATE:~6,4%
xcopy c:\1 \\remotepc\backup /e/f/v/d:%tdate% >> c:\log\ilog.txt »
Спасибо! только я поменял местами месяц и день и все заработало как часики:

set tdate=%DATE:~3,2%-%DATE:~0,2%-%DATE:~6,4%
xcopy c:\1 \\remotepc\backup /e/f/v/d:%tdate% >> c:\log\ilog.txt

формат даты зависит от установки COUNTRY »
Согласен, но изменение таких параметров может повлечь неожиданные последствия...
Так что лучше воспользоваться назначением переменной и жить спокойной :)

Elven
22-10-2015, 12:34
только я поменял местами месяц и день »
Пардон, результат невнимательности.

shugurui
22-10-2015, 13:25
for /f "tokens=1-3 delims=." %%i in ("%date%") do set "d=%%j-%%i-%%k" »
буду благодарен за разъяснение или подтверждение моих соображений по поводу этого кода:
Вызываем луп для токенов с 1-3 (их всего 3 = мм-дд-гг) и их разделителем в виде "."
для переменной %%i(1) в константе %date% назначаем переменную d в которой меняем последовательность токенов %%j(2)-%%i(1)-%%k(3)
Также понимаю, что буквы i,j и k в данном случае последовательны по алфавиту и могут быть заменены на "a b c" и т.д.
Прошу заранее извинить, т.к. пришел к этим скриптам довольно не давно, и хотел бы понять логику.

Foreigner
22-10-2015, 13:31
shugurui, В общем вы все правильно поняли. %date% разбивается на части (токены), разделителем которых служит точка, а потом просто меняется их порядок при назначении новой переменной %d%

shugurui
22-10-2015, 13:38
Foreigner, спасибо!

Опиум
25-10-2015, 11:05
robocopy уже советовали использовать?

/MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
/MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
/MAXLAD:n :: MAXimum Last Access Date - exclude files unused since n.
/MINLAD:n :: MINimum Last Access Date - exclude files used since n.
(If n < 1900 then n = n days, else n = YYYYMMDD date).

>> c:\log\ilog.txt
не будет содержать ошибки.

shugurui
26-10-2015, 11:47
robocopy уже советовали использовать? »

Еще не советовали. скорее это на перспективу. Пока достаточно хсору + то как задать переменную времени.
Спасибо за совет :)




© OSzone.net 2001-2012