Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрипт копирования файла по названию из даты (http://forum.oszone.net/showthread.php?t=347134)

Stolc 26-11-2020 17:34 2941102

Скрипт копирования файла по названию из даты
 
В определенной папке раз в сутки создается файл с именем, например, 10.09.2020.doc . То есть, каждый день создается файл с датой этого дня.
Как написать скрипт, чтобы копировать файл за прошлые сутки?
То есть, 11.09.2020 этот скрипт будет запускаться и должен скопировать в другое место файл 10.09.2020.doc

megaloman 26-11-2020 18:04 2941105

Код:

@Echo Off
        Set "BoxIn=Z:\Box_In"
        Set "BoxOut=Z:\Box_Arc"

        Set /A DeltaDay=-1
        FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "ToDay=%%d" &Call Set "ToDay=%%ToDay:~6,2%%.%%ToDay:~4,2%%.%%ToDay:~0,4%%"
        Call :FromDate %DeltaDay% %ToDay% "DDat"

Echo        Copy "%BoxIn%\%DDat:~6,2%.%DDat:~4,2%.%DDat:~0,4%.doc" "%BoxOut%\"
        Copy "%BoxIn%\%DDat:~6,2%.%DDat:~4,2%.%DDat:~0,4%.doc" "%BoxOut%\"
Exit /B

:FromDate

rem Пересчет даты на заданное кол-во дней
rem В первом аргументе +- дни
rem Во втором аргументе дата в формате dd.mm.yyyy
rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd

rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd"
rem результат в перемменной %yyyymmdd%

 SetLocal
 Set "DT=%~2"
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%"
GoTo :Eof


Vadikan 26-11-2020 21:39 2941123

С датами намного проще работать в PowerShell. Решается фактически в одну строку, переменные для наглядности
Код:

$source = "C:\source"
$target = "C:\target"
$format = "{0:dd.MM.yyyy}" #10.09.2020
$filename = -join("$($format -f (Get-Date).AddDays(-1))", ".doc")
Copy-Item -Path $source\$filename -Destination $target

См. также примеры работы с датами:
Даты создания отчета и установки системы
Как массово задать дату изменения или создания файлов в PowerShell

Stolc 27-11-2020 16:08 2941200

Спасибо, все работает!!!


Время: 19:36.

Время: 19:36.
© OSzone.net 2001-