Рекурсивное копирование файлов и структуры папок в диапазоне дат
Вы можете использовать PowerShell и Get-ChildItem для рекурсивного получения значений атрибутов LastWriteTime
файлов в исходном каталоге.
Для исходных файлов, которые имеют значение атрибута LastWriteTime
в диапазоне дат, вы можете заменить значение исходной папки значением папки назначения, а затем использовать Copy-Item с параметрами -Recurse -Force
чтобы создать соответствующую структуру и скопировать поверх файлы.
Примечание: я написал это для вас как в логике пакетного сценария, так и в логике сценария PowerShell ниже.
партия
Важно: Просто установите самые верхние значения переменных (src=
и dest=
) для исходной и целевой папок, а также для значений даты до и от нужного диапазона (Date_From=
и Date_To=
) в формате MM/DD/YYYY
как установлено в этих значениях в следующем примере скрипта.
SET "src=c:\source\original"
SET "dest=c:\temp\new"
SET "Date_From=01/01/2017"
SET "Date_To=02/26/2017"
CALL :PSScript "%src%" "%dest%" "%Date_From%" "%Date_To%"
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
EXIT
:PSScript
SET PSScript=%temp%\~tmp%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $src ^= "%~1"; >>"%PSScript%"
ECHO $dest ^= "%~2"; >>"%PSScript%"
ECHO $Date_From ^= "%~3"; >>"%PSScript%"
ECHO $Date_To ^= "%~4"; >>"%PSScript%"
ECHO $Date_From ^=[datetime]$Date_From; >>"%PSScript%"
ECHO $Date_To ^=[datetime]$Date_To; >>"%PSScript%"
ECHO $srcFiles ^= ^(Get-ChildItem -Path $src -Recurse^); >>"%PSScript%"
ECHO $srcFiles ^| %% {If^(^($_.LastWriteTime -ge $Date_From^) -or ^($_.LastWriteTime -le $Date_To^)^)>>"%PSScript%"
ECHO { >>"%PSScript%"
ECHO $dPath ^= ^($_.FullName.Replace^($src,$dest^)^); >>"%PSScript%"
ECHO Copy-Item $_.FullName -destination $dPath -Recurse -Force; >>"%PSScript%"
ECHO } >>"%PSScript%"
ECHO }; >>"%PSScript%"
GOTO :EOF
PowerShell
Важное замечание: Просто установите самые верхние значения переменных ($src=
и $dest=
) для исходной и целевой папок, а также для значений даты до и от нужного диапазона ($Date_From=
и $Date_To=
) в MM/DD/YYYY
Формат ДД / ГГГГ , установленный в этих значениях в следующем примере скрипта.
$src = "c:\source\original";
$dest = "c:\temp\new";
$Date_From = "01/01/2017";
$Date_To = "02/26/2017";
$Date_From = [datetime]$Date_From;
$Date_To = [datetime]$Date_To;
$srcFiles = (Get-ChildItem -Path $src -Recurse);
$srcFiles | % {If(($_.LastWriteTime -ge $Date_From) -or ($_.LastWriteTime -le $Date_To))
{
$dPath = ($_.FullName.Replace($src,$dest));
Copy-Item $_.FullName -destination $dPath -Recurse -Force ;
}
};
Дополнительные ресурсы